我想知道为什么我无法在while循环中只增加一个数组大小。 这是我的代码:
void pb_memory(void){
printf("ERROR : memory problem !\n");
system("PAUSE");
exit(EXIT_FAILURE);
}
int main(int argc, char *argv[])
{
int length = 0;
/*allocate memory and check for no error*/
int *array = calloc(1, sizeof(int)); /*initialize to 0*/
if(array == NULL)
pb_memory();
/*Check for valid inputs and put into array*/
while((scanf("%d", &num)) != EOF){
array[length]=num;
length++;
array = realloc(array, length*sizeof(int));
if(array == NULL)
pb_memory();
}
.
.
.
.
}
为什么这不起作用?它失败并直接进入pb_memory()函数。我希望每次长度增加一个我的数组也会... ...
感谢您的帮助。
编辑:对不起,我想保持代码简单,专注于我的问题,这就是为什么我没有写出我的所有变量。无论如何,我正在为下一次学习,并感谢@Michael和所有参与的人。答案 0 :(得分:1)
您尝试访问错误的索引array[length]=num;
,如果数组的大小为length
,则无法访问length
个元素。
您必须在重新分配后移动写入:
/*Check for valid inputs and put into array*/
while((scanf("%d", &num)) != EOF){
length++;
array = realloc(array, length*sizeof(int));
if(array == NULL)
pb_memory();
array[length-1]=num;
}
答案 1 :(得分:-1)
只是一些想法: 1.包含一些打印语句,以确切了解代码失败的位置 2.用输出程序运行gdb。例如,在CLI中,运行命令“gdb ./a.out” 3.变量“num”在哪里声明?它突然出现在while循环的条件下?