设为首页 加入收藏

TOP

加入代码以检查C++中的内存泄漏
2014-11-20 08:17:14 】 浏览:4934
Tags:加入 代码 检查 内存 泄漏

  内存泄漏是编程中常常见到的一个问题,我所遇过的原因有两个:


  1.分配完内存后忘记回收


  2.代码有问题,造成想回收却无法回收,例如:


  int* p=new int;


  p=new int; //p指针修改,原来申请内存的地址没有记录下来,于是无法释放


  下面介绍如何检查内存泄漏:


  1.包含头文件和定义


  #define _CRTDBG_MAP_ALLOC //并非绝对需要该语句,但如果有该语句,打印出来的是文件名和行数等更加直观的信息#include #include (1)#include语句必须采用上文所示顺序。如果更改了顺序,所使用的函数可能无法正确工作


  (2)此方法只在调试版本(Debug)中有效


  2.方法一:使用_CrtDumpMemoryLeaks()


  #include #include int main(int argc , char* argv[])


  {


  {


  new int;


  }


  _CrtDumpMemoryLeaks();


  return 0;


  }


  output:


  etected memory leaks!


  Dumping objects ->


  {49} normal block at 0x00384DA8, 4 bytes long.


  Data: < > CD CD CD CD


  其内容包括:内存分配型号(在大括号内)、块类型(普通、客户端或CRT)、十六进制形式的内存位置、以字节为单位的块大小、以字节为单位的块大小、前16字节的内容(十六进制)


  注意:


  (1)大括号的位置,如果不加{new int;},这块内存是等到main函数结束才泄漏的,而_CrtDumpMemoryLeaks()是在main函数里调用的,于是判断内存泄漏


  int main(int argc , char* argv[])


  {


  LytString Test="";


  _CrtDumpMemoryLeaks();


  return 0;


  }


  output:


  Detected memory leaks!


  Dumping objects ->


  {49} normal block at 0x00384DA8, 1 bytes long.


  Data: < > 00


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇结合内存分布图分析内存问题 下一篇C++数组array与vector的比较

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目