gpt4 book ai didi

调用和重新调用 : Error in `./a.out' : free(): invalid next size (normal)

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:56 26 4
gpt4 key购买 nike

我有一小段代码(在 C 中),我在其中分配一个数组并扫描其中的数字。如果数组太小,我会为我的数组重新分配内存。有时它工作正常,但有时它返回“`./a.out' 中的错误:free():无效的下一个大小(正常)。”

代码如下:

int *array;
int memory=0, i=0, scanreturn=0;
array = (int *)calloc(30, sizeof(int));
/*Allocating 30 ints*/
while ( scanf("%d", &array[i]) != EOF){
if(i == (memory - 5)){
/*There's only 5 ints left. Allocating 10 more*/
memory = memory + 10;
array = (realloc(array, memory * sizeof *array));
}
i++;
}
...
free(array);

我想这是最后释放内存的原因,但我真的不知道如何解决。

最佳答案

根据 i 和内存的起始条件,您永远不会在循环中输入 if 语句
if(i == (memory - 5)),数组永远不会重新分配,并且当您将 scanf() 写入数组时,您正在写出边界。这是未定义的行为,显然您会覆盖一些内部数据,因为您在调用 free() 时会收到警告。

关于调用和重新调用 : Error in `./a.out' : free(): invalid next size (normal),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26896393/

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