将realloc用于存储文件中的读取int的数组时出错

qwr*_*qwr 0 c

我希望在阵列达到最大容量时调整阵列大小.但是在我做完之后出现错误./a.out请帮帮我...

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

码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 5

arr++处于循环状态.这意味着arr当你打电话时,不再指向已分配内存的开始realloc().这将最终导致你所看到的错误.

也:

  1. 编程安全说明:

    不要打电话realloc():

    foo = realloc(foo, bar);
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. 非语言代码说明:

    (cap +=1) * sizeof(int)
    
    Run Code Online (Sandbox Code Playgroud)

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