WEB开发网
开发学院软件开发VC VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏... 阅读

VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏

 2007-03-17 21:27:37 来源:WEB开发网   
核心提示: 除了上述的类型外,还有下面这两种类型的内存块,VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏(6),它们不会出现在内存泄漏报告中:free block(空闲块):已经被释放(free)的内存块,Ignore block(忽略块):这是程序员显式声明过不要在内存泄漏报告中出现的

除了上述的类型外,还有下面这两种类型的内存块,它们不会出现在内存泄漏报告中:

free block(空闲块):已经被释放(free)的内存块。

Ignore block(忽略块):这是程序员显式声明过不要在内存泄漏报告中出现的内存块。

如何在内存分配序号处设置断点?

在内存泄漏报告中,的文件名和行号可告诉分配泄漏的内存的代码位置,但仅仅依赖这些信息来了解完整的泄漏原因是不够的。因为一个程序在运行时,一段分配内存的代码可能会被调用很多次,只要有一次调用后没有释放内存就会导致内存泄漏。为了确定是哪些内存没有被释放,不仅要知道泄漏的内存是在哪里分配的,还要知道泄漏产生的条件。这时内存分配序号就显得特别有用——这个序号就是文件名和行号之后的花括弧里的那个数字。

例如,在本文例子代码的输出信息中,“45”是内存分配序号,意思是泄漏的内存是你程序中分配的第四十五个内存块:

Detected memory leaks!
Dumping objects ->
C:Tempmemleakmemleak.cpp(15) : {45} normal block at 0x00441BA0, 2 bytes long.
Data: <AB> 41 42
......
Object dump complete.

CRT 库对程序运行期间分配的所有内存块进行计数,包括由 CRT 库自己分配的内存和其它库(如 MFC)分配的内存。因此,分配序号为 N 的对象即为程序中分配的第 N 个对象,但不一定是代码分配的第 N 个对象。(大多数情况下并非如此。)

这样的话,你便可以利用分配序号在分配内存的位置设置一个断点。方法是在程序起始附近设置一个位置断点。当程序在该点中断时,可以从 QuickWatch(快速监视)对话框或 Watch(监视)窗口设置一个内存分配断点:

上一页  1 2 3 4 5 6 7 8  下一页

Tags:VC 如何 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接