gpt4 book ai didi

c - 一些迭代后重新分配损坏 C

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:22 27 4
gpt4 key购买 nike

我正在尝试为函数中的结构指针数组动态分配内存。它一直工作到 3 次迭代,但在出现此错误后崩溃:

double free or corruption (fasttop): ...

这是我的结构指针数组声明:

Intersection** alreadyUse = malloc(sizeof(Intersection*));

if(alreadyUse == NULL) {
exit(1);
}

int size = 1;
alreadyUse[0] = inter; // Pointer of an Intersection

// Some Code

checkFunction(alreadyUse, &size, interLeft);

这是我的职责

bool checkFunction(Intersection** alreadyUse, int* size, Intersection* inter) {

for(int i = 0; i < *size; i++) {
if(alreadyUse[i] == inter) {
return true;
}
}

*size = *size +1;
Intersection** tmp = realloc(alreadyUse, sizeof(Intersection*) * *size);

if(tmp == NULL){
exit(1);
}
else {
alreadyUse = tmp;
}

alreadyUse[*size-1] = inter;

return false;
}

正如我所说,它适用于 1、2、3 然后我得到错误。

有人知道为什么它可以工作然后突然崩溃吗?

感谢您的帮助。

最佳答案

您在 checkFunction 中更改了 alreadyUse 的值。但这对调用者没有影响。如果对 realloc 的调用实际上重新分配,调用者仍然有一个指向现在已被释放的旧 block 的指针。

关于c - 一些迭代后重新分配损坏 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42211316/

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