我希望在阵列达到最大容量时调整阵列大小.但是在我做完之后出现错误./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)
你arr++处于循环状态.这意味着arr当你打电话时,不再指向已分配内存的开始realloc().这将最终导致你所看到的错误.
也:
编程安全说明:
不要打电话realloc():
foo = realloc(foo, bar);
Run Code Online (Sandbox Code Playgroud)
如果发生错误,foo将设置为NULL,您将泄漏原始分配.
非语言代码说明:
(cap +=1) * sizeof(int)
Run Code Online (Sandbox Code Playgroud)
有点奇怪.为什么不++cap * sizeof(int)呢?或者更好的是,在两条线上做,而不是把它全部塞进一条线.