从文件读取int时,使用realloc'ed数组运行代码时出错

时间:2012-04-06 16:34:35

标签: c

所以指针的初始容量是5,那么它将自己调整大小取决于文件中的整数,之后我想在数组中打印读取整数。但是我在运行它时遇到了这个错误。

ERROR:a.out: malloc.c:3574: mremap_chunk: Assertion `((size + offset) & (mp_.pagesize-1)) == 0' failed.
Aborted

(之后的大量东西)

代码:

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


    int main(void)
    {
    int index=0;
    int cap=5;
    int *arr = malloc(cap*sizeof(int));
    FILE *f;

    if((f=fopen("/home/alexchan/Downloads/fileOints000.txt","r"))==NULL)
    printf("You cannot open");

    int *y = arr;

    while(fscanf(f, "%d", arr++)!=EOF)
    {
    index++;
    if(index==cap)
    arr = realloc(arr, (cap +=10) * sizeof(int));
    }


    int x;
    for(x=0;x<index;x++)
    printf("%d\n",*(y++));

    return 0;


    }

1 个答案:

答案 0 :(得分:2)

您正在设置y指向您的数组,但在重新安装数组时忘记更新其值。

while(fscanf(f, "%d", arr++)!=EOF)
{
    index++;
    if(index==cap)  arr = realloc(arr, (cap +=10) * sizeof(int));
}

int *y = arr; // THIS SHOULD BE AFTER THE LOOP
在一般情况下,

realloc不会使数组增长;它返回一个完全不同的指针。发生这种情况后,y的旧值不能再使用了。