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