gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:14 24 4
gpt4 key购买 nike

我想在数组达到最大容量时调整它的大小。但是在我执行 ./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;
}

最佳答案

你的循环条件中有arr++。这意味着当您调用 realloc() 时,arr 不再指向已分配内存的开始。这将以您看到的错误告终。

还有:

  1. 编程安全注意事项:

    不要在以下形式中调用realloc():

    foo = realloc(foo, bar);

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

  2. 非惯用代码注释:

    (cap +=1) * sizeof(int)

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

关于c - 将 realloc 用于存储从文件读取的 int 的数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10057002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com