我想知道为什么我不能在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和所有参与的人。
您正试图访问一个错误的索引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.包括一些打印语句,以查看代码失败的确切位置2.运行gdb并输出程序。例如,在CLI中,运行命令"gdb./a.out"3.变量"num"在哪里声明?它突然出现在while循环的条件下?