一种Windows下懒式探测野指针的方法

xiaoxiao2021-02-28  72

一种Windows下探测野指针的方法

在一个大型项目中遇到了crt报告HEAP: Free Heap block XXXXXXXX modified at YYYYYYYY after it was freed。 原因很明确:野指针,但是因为项目里大量使用了智能指针,因此要定位问题就略头痛了。

最初是准备在程序运行时建立内存断点以监视所有对YYYYYYYY的写操作。但是刚开始运行的时候YYYYYYYY是不能访问的。 于是准备重载new 操作以在该内存块能访问的时候下断点,然而对于一个要反复分配内存的程序,手工监视某个页是否可以访问实在太麻烦了,根本没有可操作性。于是我在new里面加了如下代码:

{  static BOOL bMark=FALSE;  __try  {   if(!bMark)   {    int i=*((PUINT8)(/*出错地址*/);    _ASSERT(FALSE);   }   bMark=TRUE;  }  __except(1)  {  } }

每次new操作之后都试图访问YYYYYYYY,如果不能访问,则进入异常处理部分直接忽略_ASSERT()及后面的代码,继续运行。如果可以访问,那么_ASSERT()会触发一个断点。此时可以手动在YYYYYYYY处设置内存断点,同时自动将bMark设置为TRUE,后面再执行到此的时候就不会停下来。如此只需要一次手动操作即可达成设置断点的效果。

实在是懒出了风格之举。 :-D

转载请注明原文地址: https://www.6miu.com/read-43882.html

最新回复(0)