天天看点

第二次学到的东西VC使用CRT调试功能来检测内存泄漏

一个完整的小程序下来学到的东西。虽然都是网上找到的,但是还是有必要整理一下。

1

VC使用CRT调试功能来检测内存泄漏

一是使用调试堆函数:

#define _CRTDBG_MAP_ALLOC

#include<stdlib.h>

#include<crtdbg.h>

注意:#include 语句的顺序。如果更改此顺序,所使用的函数可能无法正确工作。

二是在需要检测内存泄漏的地方添加下面这条语句来输出内存泄漏信息:

_CrtDumpMemoryLeaks();

如果程序只有一个出口,那么调用 _CrtDumpMemoryLeaks 的位置是很容易选择的。但是,如果程序可能会在多个地方退出该怎么办呢?在每一个可能的出口处调用 _CrtDumpMemoryLeaks 肯定是不可取的,那么这时可以在程序开始处包含下面的调用:_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );这条语句无论程序在什么地方退出都会自动调用 _CrtDumpMemoryLeaks。注意:这里必须同时设置两个位域标志:_CRTDBG_ALLOC_MEM_DF 和 _CRTDBG_LEAK_CHECK_DF。

2数组二位数组指针形式的使用

内存申请

char   **p;

p   =   new   char   *   [hight];

for(int   k   =   0;   k   <   hight;   k++)

p[k]   =   new   char[width];

内存释放

for(int   i   =   0;   i   <   hight;   i++)  

delete   []   p[i];   //release

delete   []   p;

p   =   NULL;

3二维数组和指针

定义a[N][N]

a[i]+j则是一维数组a[i]的j号元素首地址,它等于&a[i][j]。

定义**a

*(*(a+i)+j)为a[i][j]的内容

继续阅读