什么会导致删除在我的类的数据字段中留下垃圾值?

时间:2011-11-03 04:52:55

标签: c++ class delete-operator garbage

我有一个包含3个节点指针和2个整数的节点类。我使用new分配所有节点,但是当我对它们调用delete时,整数设置为-17891602并且它会搞砸我代码的其余边界检查。什么会导致delete这样做?

3 个答案:

答案 0 :(得分:5)

delete后,你的记忆不再是你的了。不要检查它,不要对它做任何事情,因为如果你这样做,那么你有未定义的行为。它可能很快就会重复使用。

干杯&第h。,

答案 1 :(得分:0)

检查指针字段是否也获得新值。它们等于0xfeeefeee吗? (这是十六进制的-17891602。)您的内存管理器可能正在覆盖释放的内存,因此当您尝试读取或写入您不应再访问的内存时,在崩溃转储中更容易识别。

如果您正在读取释放的对象以进行边界检查,那么您将依赖于未定义的行为。查看您的环境文档,了解它对释放内存的作用(如果有的话)。你的边界检查员需要与之合作;你不能认为它会在一般情况下起作用。

答案 2 :(得分:0)

如果您在Linux上开发并使用gdb,则可以使用watch命令将观察点放到GDB中。这有助于查找何时覆盖了内存位置。