是否正在删除堆栈对象?

时间:2011-05-19 12:52:57

标签: c++ memory-management

是否有工具来捕获堆栈对象的删除,gcc和Visual Studio调试版本有可能立即破坏该事件?

我处理大型旧项目,因此这不是关于如何编写代码的问题,而是如何检测和修复问题。

2 个答案:

答案 0 :(得分:2)

如果您事先设计所有权并使用智能指针在必要时强制执行,那么这种情况发生的可能性很小。我怀疑他们会做什么,但会抛出一般的糟糕释放。

答案 1 :(得分:2)

大多数堆实现都不能容忍无效指针(即当你delete一个堆没有返回给你的地址时)。几乎可以确定标准的Windows堆,而CRT的堆(由MSVC实现)在这种情况下会导致调试断点。

您也可以替换new / delete运算符的实现并自己进行检查(在您的情况下,您只想检查地址是否属于堆栈内存,这很容易)。