-1

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

4

3 回答 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 回答