配列で最大数を見つけるときの奇妙な動作

user13641095

問題をブレインストーミングしようとしたときに、非常に奇妙な動作が見つかりました。

コードの目的:配列内の最大数を見つけるための単純なコード。最初のインデックスを変数に格納し、リスト内の他のすべてのインデックスと比較するだけです。別の数値が大きい場合、その数値が変数に格納されている数値に置き換わり、リストの最後までプロセスが繰り返されます。

#include <stdio.h>

const int SIZE = 8;

int main(void)
{
    int arr[] = {7, 3, 9, 14, 1, 27, 14, 2};
    int largest;

    largest = arr[0];

    for (int i = 1; i <= SIZE; i++)
    {
        if (largest < arr[i])
        {
            largest = arr[i];
        }
    }

    printf("The largest number in the array is %i\n", largest);
}

奇妙な振る舞い:これは時々機能します。また、あるべきではない記憶の領域にぶつかったような印象を与える大きな数字を受け取ることもあります。これが毎回発生するかどうかは理解できましたが、2回目または3回目ごとにしか発生しないため、コードをコンパイルすると戸惑います。コードは変更されませんが、出力は変更されます

コンソールログ:

~/pset3/plurality/ $ ./test
The largest number in the array is 1366797536
~/pset3/plurality/ $ ./test
The largest number in the array is 27
~/pset3/plurality/ $ ./test
The largest number in the array is 27
~/pset3/plurality/ $ ./test
The largest number in the array is 1773422672
~/pset3/plurality/ $ 

私の考え:ループがどういうわけかヒットし、配列の終わりを超えて、それを最大数と見なします。繰り返しますが、これの奇妙な点は、これが50%の時間しか発生しないことです

どんなアイデアでも大歓迎です。

ジョン・ケレン

ループの実行回数が多すぎます。ループ終了条件i <= SIZEによりarr[SIZE]arr配列の外側にあるループ本体にアクセスします。C配列のインデックスは0から始まることに注意してください。

配列はスタックフレームに格納されているため、コードは配列を超えた最初のアドレスにあるスタックからガベージ値をフェッチします。このガベージ値は何でもかまいません。したがって、大きな正の値になる可能性があり、結果として表示されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

配列と文字列の間の最大数を見つける

分類Dev

配列の最大数を3つ見つける(PHP)

分類Dev

javascriptの配列を使用して最大数を見つける

分類Dev

Java-2D配列で最大数を見つける

分類Dev

(Java)配列内の最大数とその場所を見つける

分類Dev

文字列のセル配列で最大数を見つける(MATLAB)

分類Dev

配列内の最大数を見つけるjavascriptが機能しない

分類Dev

参加できるコースの最大数を見つける

分類Dev

Laravelの関係で列の最大数を見つける

分類Dev

文字列配列から最大数を見つける方法

分類Dev

2D配列を使用して列の最大数を見つける

分類Dev

Cはfloat配列で2つの最大数と2つの最小数を見つけます

分類Dev

Java-配列を使用して最大数と最小数を見つける

分類Dev

配列で最大数を見つけると、最大整数値が返されます

分類Dev

mysqlで最大数を見つける

分類Dev

ArrayListで最大数を見つける

分類Dev

行の最大数を見つける

分類Dev

最大数のQtを見つける

分類Dev

ループを使用して配列内の最小/最大数を見つける

分類Dev

配列のソートに必要なグループの最大数を見つける方法は?

分類Dev

ソートされていない配列の最大数を見つけるための選択ソート

分類Dev

多次元配列と最大数を見つける方法

分類Dev

同じ名前の列の最大数を見つける方法

分類Dev

一意の配列インデックスから抽出された配列で可能な最大数の合計を見つける方法

分類Dev

処理に使用できるコアの最大数を見つける

分類Dev

複数の列で同じ下桁の最大数を見つける

分類Dev

JSで最大数と最小数を見つける方法は?

分類Dev

巨大なASCIIファイルに含まれている(科学的記数法での)最大数と最大数のセットを見つけます

分類Dev

どのように実行することができ、参加者の最大数を見つけるには?

Related 関連記事

  1. 1

    配列と文字列の間の最大数を見つける

  2. 2

    配列の最大数を3つ見つける(PHP)

  3. 3

    javascriptの配列を使用して最大数を見つける

  4. 4

    Java-2D配列で最大数を見つける

  5. 5

    (Java)配列内の最大数とその場所を見つける

  6. 6

    文字列のセル配列で最大数を見つける(MATLAB)

  7. 7

    配列内の最大数を見つけるjavascriptが機能しない

  8. 8

    参加できるコースの最大数を見つける

  9. 9

    Laravelの関係で列の最大数を見つける

  10. 10

    文字列配列から最大数を見つける方法

  11. 11

    2D配列を使用して列の最大数を見つける

  12. 12

    Cはfloat配列で2つの最大数と2つの最小数を見つけます

  13. 13

    Java-配列を使用して最大数と最小数を見つける

  14. 14

    配列で最大数を見つけると、最大整数値が返されます

  15. 15

    mysqlで最大数を見つける

  16. 16

    ArrayListで最大数を見つける

  17. 17

    行の最大数を見つける

  18. 18

    最大数のQtを見つける

  19. 19

    ループを使用して配列内の最小/最大数を見つける

  20. 20

    配列のソートに必要なグループの最大数を見つける方法は?

  21. 21

    ソートされていない配列の最大数を見つけるための選択ソート

  22. 22

    多次元配列と最大数を見つける方法

  23. 23

    同じ名前の列の最大数を見つける方法

  24. 24

    一意の配列インデックスから抽出された配列で可能な最大数の合計を見つける方法

  25. 25

    処理に使用できるコアの最大数を見つける

  26. 26

    複数の列で同じ下桁の最大数を見つける

  27. 27

    JSで最大数と最小数を見つける方法は?

  28. 28

    巨大なASCIIファイルに含まれている(科学的記数法での)最大数と最大数のセットを見つけます

  29. 29

    どのように実行することができ、参加者の最大数を見つけるには?

ホットタグ

アーカイブ