捕获堆栈对象的删除
Catching delete of a stack object?
是否有工具可以捕获堆栈对象的删除,gcc和Visual Studio调试版本在该事件上立即中断的可能性有多大?
我处理的是大型的旧项目,所以这不是如何编写代码的问题,而是如何检测和解决问题的问题。
大多数堆实现都不能容忍无效指针(即,当您delete
堆未返回给您的地址时)。几乎可以肯定的是,在这种情况下,标准窗口堆和 CRT 的堆(由 MSVC 实现)会导致调试断点。
您也可以替换 new
/delete
运算符的实现并自己进行检查(在您的情况下,您只想检查地址是否属于堆栈内存,这很容易)。
如果您提前设计所有权并在必要时使用智能指针来强制执行它们,则不太可能发生这样的事情。我怀疑他们除了抛出一个通用的坏释放之外会做任何事情。
相关文章:
- 迭代时从向量和内存中删除对象
- C++从对象自己的类中删除对象
- 如何通过对象的类属性删除对象,并返回其对象值?
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 从列表C++中删除对象
- c++ 循环访问对象列表并删除对象
- 从对象本身的容器中删除对象
- 从尝试引用已删除函数的矢量 C++ 中删除对象
- 如何通过指向元组的共享指针删除对象
- 防止通过接口删除对象
- 在 c++ 中从内存中删除对象
- 当对象被删除时,复制被删除对象的对象如何
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 从内存中删除对象
- 通过C++中的删除方法自行删除对象
- C++ - 析构函数只是释放内存还是实际删除对象
- 如何通过存储在 std::list 中的指针删除对象?
- 如何通过对象参数从指针矢量中删除对象和指针
- 我可以删除对象的右值版本的函数吗?
- 使用对象的索引从矢量中删除对象