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

时间:2013-12-09 13:19:39

标签: c arrays memory-management realloc

我想知道为什么我无法在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和所有参与的人。

2 个答案:

答案 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循环的条件下?