0

私は配列を学んでいて、この小さなプログラムを書いて、それがどのように機能するかを確認しました。しかし、セグメンテーションフォールトでクラッシュします。これは、割り当てられていないメモリの場所に変数/関数を書き込んでいることを意味します。しかし、私は方法を理解できません。誰でも私に教えてもらえますか?main() から introArray を呼び出しています。

int introArray (void)
{
    int total, ctr;

    printf("enter how many students \n");
    scanf("%d", &total);

    int students[total];
    ctr = 0;

    while ( students[ctr] <= total)
    {
        printf("enter student %d DOB in mmddyy \n", ctr );
        scanf("%d", students[ctr]);
        ctr++;
    }

    return 0;

}

4

4 に答える 4

2

あなたのコードには、実装ロジックの問題が 1 つあります。学生の総数はtotal、したがって、あなたのwhileループは

while(ctr < total)

読み取るデータもアンパサンドが欠落している必要scanf("%d", &students[ctr]);があります

于 2013-03-19T22:50:38.827 に答える
0

ctrを超えtotalます。このようにあなたは限界を超えています ループを次のように変更します

while (ctr < total)
{
        printf("enter student %d DOB in mmddyy \n", ctr );
        scanf("%d", &(students[ctr]));
        ctr++;
}
于 2013-03-19T22:49:57.630 に答える
0

この行

while ( students[ctr] <= total)

ループ内で配列の境界を超えて読み取ることに対する保護ではありません。ctrこれにより、インデックスとして使用する場合、配列の末尾を超えて読み取ることができなくなります

while ( ctr < total)

配列インデックスはゼロベースであるため、厳密な不等式が必要です。

さらに、ループscanf内の呼び出しwhileが間違っています。2 番目の引数はポインターである必要があり、現在は整数を渡しています。そのはず

scanf("%d", &students[ctr]);
于 2013-03-19T22:50:24.510 に答える
0

おもう

scanf("%d", students[ctr]);

する必要があります

scanf("%d", &students[ctr]);
于 2013-03-19T22:50:36.087 に答える