捕获堆栈对象的删除

Catching delete of a stack object?

本文关键字:删除 对象 堆栈      更新时间:2023-10-16

是否有工具可以捕获堆栈对象的删除,gcc和Visual Studio调试版本在该事件上立即中断的可能性有多大?

我处理的是大型的旧项目,所以这不是如何编写代码的问题,而是如何检测和解决问题的问题。

大多数堆实现都不能容忍无效指针(即,当您delete堆未返回给您的地址时)。几乎可以肯定的是,在这种情况下,标准窗口堆和 CRT 的堆(由 MSVC 实现)会导致调试断点。

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

如果您提前设计所有权并在必要时使用智能指针来强制执行它们,则不太可能发生这样的事情。我怀疑他们除了抛出一个通用的坏释放之外会做任何事情。