我的功能:
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;
}
当我免费拨打电话时,我在Xcode中收到此错误:
NHF(1670,0x7fff77e1a300)malloc: *对象0x10050c9e0的错误:被释放的指针是>未分配 * 在malloc_error_break中设置断点以进行调试
这是一款SDL游戏,此功能在到达地图末尾后即可自由拍摄。
我必须在星期天完成这个,但我被卡住了:(
答案 0 :(得分:0)
你有一个错误。
您传递给free()
的值必须是malloc()
或其中一个相关函数返回的值。
我发现您正在修改moving
变量,但我认为我没有足够的背景来告诉您确切需要更改的内容。
但您传递给free()
的值显然不是malloc()
返回的值。
答案 1 :(得分:0)
编辑2
查看代码中的第110行和第113行(pastebin)。您创建移动,然后设置moving = shot,然后在第121行自由移动。您从未在该翻译块中使用malloc()
或calloc()
。这就是你收到错误的原因。不要在该翻译块中释放它。您可能需要在调用函数中(或者在给定内存的任何位置)释放镜头。
<强> 修改 强>
如果在您的代码中,您创建了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;
}
您可能会收到您所描述的错误消息 我得到了这个:
查看代码 以确定类似的条件。更好的是,请按照编译器错误消息的说明进行操作: 在malloc_error_break中设置断点以进行调试