1.案例

调试运行,程序退出时崩溃在ntdll中的一个函数中,output窗口中输出:
HEAP: Free Heap block xxxxxx modified at xxxxxx after it was freed

此时,无法快速找出程序哪里出现了内存非法访问。

2.解决方法

a.安装Debugging Tools for Windows(也就是WinDbg),安装后将安装目录添加到Path环境变量中

b.执行:gflags -p /enable ***.exe /full
"***.exe"为需要调试的程序名称,不需要完整路径。
该命令行会在注册表里设置一些调试参数,使内存在使用的时候加入了保护机制,一旦内存写
越界,或者发生野指针的问题,都会导致一个中断。由此,就可以确定问题到底出在哪里了。|

c.调试运行自己的程序,此时Visual C++会直接定位在有问题的代码处。

d.删除注册表中的调试设置:gflags -p /disable ***.exe


本文链接地址: 用GFlags解决Visual C++无法定位的内存非法访问问题
https://blog.qingfengju.com/index.asp?id=234

上一篇: MySQL C API的简单应用
下一篇: DoDataExchange(CDataExchange* pDX)不执行,没有执行

分类:Win32/C++ 查看次数:10187 发布时间:2009/8/6 22:24:09