我有一个包含 3 个节点指针和 2 个整数的节点类。我用 分配所有节点new
,但是当我调用delete
它们时,整数被设置为-17891602
并且它搞砸了我代码的其余边界检查。什么会导致delete
这样做?
问问题
165 次
3 回答
5
在那之后delete
,那个记忆不再是你的了。不要检查它,不要对它做任何事情,因为如果你这样做了,那么你就有了未定义的行为。它可能很快就会被重复使用。
于 2011-11-03T04:57:43.023 回答
0
检查指针字段是否也获得新值。它们等于 0xfeeefeee 吗?(那是十六进制的 -17891602。)您的内存管理器可能正在覆盖已释放的内存,因此当您尝试读取或写入您不应该再访问的内存时,在故障转储中更容易识别。
如果您正在阅读释放的对象以进行边界检查,那么您依赖于未定义的行为。检查您的环境的文档以了解它对释放内存的作用(如果有的话)。您的边界检查员需要与它合作;你不能假设它会在一般情况下工作。
于 2011-11-03T04:59:34.593 回答
0
如果您在 Linux 上开发并使用,您可以使用GDB 命令gdb
放置一个观察点。watch
这可以帮助查找内存位置何时被覆盖。
于 2011-11-03T05:41:02.683 回答