在 Visual C++ 程序中,我在指针上调用 delete
。我稍后需要检查指针是否已被删除。我注意到 Visual C++ 会将地址设置为 0x00000000
,但稍后该值可能会更改为类似 0xABABABAB
、0xFEEEFEEE
或 some other value 的内容诸如此类。检查 NULL
仅适用于 0x00000000
地址。
有没有一种可靠的方法可以检查指针是否已被删除,而不管地址可能会发生这些变化?
最佳答案
如果你正在删除指向一个对象的指针,你可以看到析构函数。如果您想知道是否执行了无内存操作,没有可靠/可移植的方法可以知道这一点。内存管理依赖于实现。即使这样,内存释放也有可能被图书馆推迟。但是您应该始终相信delete
永远不会失败。如果您没有重载 delete operator
,您可以依赖将释放内存的库。
关于内存内容,内容被释放后,你不应该访问它们,因为行为是未定义的。
如果您希望将其用于调试目的,我建议您使用一些替代技术。
如果你想知道指针是否被释放,你应该显式
将它设置为0
,稍后你可以将指针与0
进行比较检查它是否被释放。
if (...) {
delete ptr;
ptr = 0; // set explicitly
}
...
if(0 == ptr) {
// Pointer was freed
...
} else {
// Pointer was not freed
...
}
关于c++ - 删除指针并检查地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23589808/