是否有工具来捕获堆栈对象的删除,gcc和Visual Studio调试版本有可能立即破坏该事件?
我处理大型旧项目,因此这不是关于如何编写代码的问题,而是如何检测和修复问题。
答案 0 :(得分:2)
如果您事先设计所有权并使用智能指针在必要时强制执行,那么这种情况发生的可能性很小。我怀疑他们会做什么,但会抛出一般的糟糕释放。
答案 1 :(得分:2)
大多数堆实现都不能容忍无效指针(即当你delete
一个堆没有返回给你的地址时)。几乎可以确定标准的Windows堆,而CRT的堆(由MSVC实现)在这种情况下会导致调试断点。
您也可以替换new
/ delete
运算符的实现并自己进行检查(在您的情况下,您只想检查地址是否属于堆栈内存,这很容易)。