更多课程 选择中心

C/C++培训
达内IT学院

400-111-8989

C++培训笔记--内存泄漏检测

  • 发布:C++培训
  • 来源:网络
  • 时间:2018-05-29 09:46

C++ 简介

C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。

C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。

C++ 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的C,后来在 1983 年更名为 C++。

C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。

C++没有java的内存垃圾回收机制,在程序短的时候可能比较容易发现问题,在程序长的时候是否有什么检测的方法呢?

假设有一个函数可以某点检测程序的内存使用情况,那是否可以在程序开始的时候设置一个点,在程序结束的时候再设置一个点,比较这两个值是否一样就可以知道内存泄露的情况了。

windows下的内存检测方法:

#define _CRTDBG_MAP_ALLOC //一定要加上这一句

#include <stdlib.h>

#include <crtdbg.h>

#include <iostream>

using namespace std;

_CrtMemState s1, s2, s3;

void GetMemory(char *p, int num)

{

p = (char*)malloc(sizeof(char) * num);

}

int main(int argc,char** argv)

{

_CrtMemCheckpoint( &s1 ); //检测当前内存的使用情况

char *str = NULL;

int n=1000;

GetMemory(str, 100);//这里申请后没有释放内存,内存泄露了

_CrtMemCheckpoint( &s2 );

_CrtMemDifference( &s3, &s1, &s2); //比较s1,s2的内存差异,结果放s3

printf("%ud",s3.lTotalCount);

return 0;

}

之前一直没有搞清楚_CrtDumpMemoryLeaks();的调用方法,因为之前执行程序都是ctrl + F5的,原来发现这个函数是在F5的时候生效

#ifdef _DEBUG

#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)

#else

#define DEBUG_CLIENTBLOCK

#endif

#define _CRTDBG_MAP_ALLOC

#include <crtdbg.h>

#ifdef _DEBUG

#define new DEBUG_CLIENTBLOCK

#endif

int main()

{

int* p = new int();

int n=5;

while(n--){

new int;

}

_CrtDumpMemoryLeaks();

return 0;

}


嗯,编译器提示有6个内存块内存泄露了。

同时,注意其中也显示了内存泄露的行号,利于调试。

在linux下也有类似的方法

免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:2017年百度c++面试题
下一篇:C++培训笔记--怎么实现智能指针

C++培训笔记--怎么实现智能指针

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 搜索抖音号

    搜索抖音号:1821685962

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省