C:在循环中增加一个动态数组



我想知道为什么我不能在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循环的条件下?

最新更新