0

我想在达到最大容量时调整数组的大小。但是在我这样做之后出现了错误。/a.out 请帮助我...

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

代码:

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


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

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

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

  return 0;
}
4

2 回答 2

5

你有arr++你的循环条件。这意味着arr当您调用realloc(). 这最终会导致您看到的错误。

还:

  1. 编程安全注意事项:

    不要realloc()在表格中调用:

    foo = realloc(foo, bar);
    

    如果发生错误,foo将设置为NULL并且您将泄漏原始分配。

  2. 非惯用代码注释:

    (cap +=1) * sizeof(int)
    

    有点奇怪。为什么不++cap * sizeof(int)呢?或者更好的是,分两条线做,而不是把它全部塞进一条线。

于 2012-04-07T18:13:01.173 回答
0

您需要realloc在从 m 收到的相同地址上执行malloc,但您增加arrwhile(fscanf(f, "%d", arr++)!=EOF)

于 2012-04-07T18:13:31.103 回答