gpt4 book ai didi

c++ - 堆腐败,怎么办?

转载 作者:行者123 更新时间:2023-11-28 07:15:35 25 4
gpt4 key购买 nike

我正在使用 SFML+Box2D 开发一个游戏,当我删除一个 Controller 对象时出现堆损坏,它会触发一个断点

retval = HeapFree(_crtheap, 0, pBlock);
if (retval == 0)
{
errno = _get_errno_from_oserr(GetLastError());
}

在调试时它说这是一个堆损坏并告诉我“Alumni.exe 中 0x771CE753 (ntdll.dll) 处的未处理异常:0xC0000374:堆已损坏(参数:0x77204270)。”

我怎么知道这个内存地址之前写了什么?避免堆损坏的好习惯是什么?我对我的指示很小心,我没有重复删除任何东西。

如果有人想花时间,存储库位于 github.com/mrseth/Alumni。您可以按一次回车键和退格键触发崩溃。输入产生一个 Controller ,退格键删除最后产生的一个。删除 Controller 的代码位于 https://github.com/mrseth/Alumni/blob/Stephen/Alumni/Alumni/TestClickListener.cpp

最佳答案

我发现了问题。我在 SceneNode 中调用 SceneNodes 上的 delete,因此它在 SceneNode 指针上调用 delete。问题是,它可能会删除它的子节点,这些子节点可能是 SceneNode 的子类。所以我改变了每个子类,它负责自行释放,并解决了堆溢出问题。感谢您的见解和信息。

关于c++ - 堆腐败,怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20275460/

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