3

私はこのコードを使用してみました:

int index = 0; 
int value;
int IntegerArray[MAXARRAYSIZE];
while(fscanf(fp, "%d", &value) == 1){ 
    IntegerArray[index++] = value; 
}

しかし、私はこのエラーを受け取りました:

プログラムは信号 EXC_BAD_ACCESS を受信しました。メモリにアクセスできませんでした。理由: __svfscanf_l () のアドレス: 0x00000038 0x98a7c1ea の KERN_PROTECTION_FAILURE

fpはタイプFILEであり、必要なすべてのライブラリ インクルージョンを使用したと思います。助けてください。

4

2 に答える 2

2

index未満かどうかを確認する必要がありMAXARRAYSIZEます。そうしないと、範囲外になり、未定義の動作(通常は無効なメモリアクセス)が発生します。

変化する

while(fscanf(fp, "%d", &value) == 1)

while((1 == fscanf(fp, "%d", &value)) && (index < MAXARRAYSIZE))

配列サイズを定義したよりも整数を格納することはできません。

于 2012-06-15T05:15:07.733 に答える
1

プログラムに属していないメモリにアクセスしようとしているため、maxrraysizeを超えている可能性があります。そのため、それを確認することをお勧めします。また、安全のために配列を初期化してください。その場所の以前の値。

int index = 0; 
int value;
int IntegerArray[MAXARRAYSIZE] = {0};

while(fscanf(fp, "%d", &value) == 1){ 
    if (index >= MAXARRAYSIZE)
    {
         printf("reached max array size!\n");
         break ;
    }
IntegerArray[index++] = value; 
}
于 2012-06-15T05:17:25.237 に答える