gpt4 book ai didi

C: 被释放的指针未分配——调用 free 时

转载 作者:行者123 更新时间:2023-11-30 17:24:07 25 4
gpt4 key购买 nike

我的功能:

Shot *shot_collide(Shot *shot)
{
Shot *moving, *remaining;
remaining=NULL;

moving=shot;
while(moving!=NULL)
{
if(moving->y>658) //ha eléri az alját
{
if(remaining==NULL) //ha ez az első elem
{
shot=moving->next;
free(moving);
moving=shot->next;
}else{

remaining->next=moving->next;
free(moving);
moving=remaining->next;
}
}else{
moving=moving->next;
}

}

return shot;
}

当我调用 free 时,我在 Xcode 中收到此错误:

NHF(1670,0x7fff77e1a300) malloc: * error for object 0x10050c9e0: pointer being freed was >not allocated * set a breakpoint in malloc_error_break to debug

这是一款SDL游戏,此功能是在到达 map 末端后释放射击。

我必须在周日之前完成这个任务,但我被困住了:(

最佳答案

编辑 2

查看代码 (pastebin) 中的第 110 行和第 113 行。您创建移动,然后设置 moving = shot,然后在第 121 行自由移动。您从未在该翻译 block 中使用过 malloc()calloc() 。这就是你收到错误的原因。不要在该翻译 block 中释放它。您可能需要在调用函数中释放镜头(或在给定内存的任何地方)。

编辑
如果在您的代码中,您创建了 moving,然后您将 moving 更改为指向与最初返回的位置不同的位置,则问题可能是由不同的 原因。见图:

char *string = {0};
string = calloc(10, 1);//see 1)
string++;//see 2)
free(string);//see 3)

1) 字符串在内存中可能如下所示:

  0x000BCA00
>|< (pointer position returned from calloc)
|0|0|0|0|0|0|0|0|0|0|

2)指针string从原来的位置移动:

  0x000BCA04
>|< (new ponter position)
|0|0|0|0|0|0|0|0|0|0|8|

3) 0x000BCA00 != 0x000BCA04,因此 free() 不起作用

结束编辑

如果编译并运行:

int main(void)
{

char *p = malloc(10);
p++; //pointer is no longer what malloc returned, so free will not work
free(p);fails here
return 0;
}

您可能会收到您所描述的错误消息。
我得到这个:

enter image description here

查看您的代码以识别类似的条件。更好的是,按照编译器错误消息的指示进行操作:在 malloc_error_break 中设置断点进行调试

关于C: 被释放的指针未分配——调用 free 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27327426/

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