3

我尝试使用此代码:

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

但我收到了这个错误:

程序收到信号 EXC_BAD_ACCESS,无法访问内存。原因:KERN_PROTECTION_FAILURE at address: 0x00000038 0x98a7c1ea in __svfscanf_l ()

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 回答