读取输入(int)并使用malloc和realloc将其存储到数组中

时间:2014-05-13 22:08:14

标签: c int malloc realloc

我正试图从标准输入读取整数,但我不知道它的长度。我试过这个,但我不知道它为什么不起作用

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *arr = (int *) malloc(sizeof(int));


    int sizeCounter = 0;
    int tmp = 0;
    while(scanf("%d", &tmp) != EOF)
    {   

        arr = (int *) realloc(arr, sizeof(arr)+sizeof(int));
        arr[sizeCounter] = tmp;     
        sizeCounter++;          

    }
}

错误 - realloc():指针无效:0xb76d8000 *

2 个答案:

答案 0 :(得分:2)

这条线错了。

    arr = (int *) realloc(arr, sizeof(arr)+sizeof(int));

sizeof(arr)+sizeof(int)是常数。它等于sizeof(int*)+sizeof(int)

您需要的是:

    arr = (int *) realloc(arr, (sizeCounter+1)*sizeof(int));

答案 1 :(得分:1)

R Sahu正确回答了为什么这不起作用。

然而,看到你的代码我不禁会因为每次读取时重新分配内存块的效率低下而感到畏缩。如果要使用内存块/动态数组来存储读入的整数,请分配合理的内存量(这取决于您在典型情况下预期的输入量,并且完全取决于应用程序)。然后在块满时重新分配块。内存分配是一项非常昂贵的操作,每次读取时重新分配块是非常浪费的,因此永远不应该这样做。