内存泄漏检测工具

1. vs/vc(windows下)自带的检测工具

 将下面的语句加到需要调试的代码中

#define _CRTDBG_MAP_ALLOC  // 像一个开关,去开启一些功能,这个必须放在最上面
#include <stdlib.h>
#include <crtdbg.h>


// 接管new操作符  原理: 就是使用新定义的DBG_NEW去替换代码中的new,然后它会将内存管理起来,已经释放的打上标记,如果执行到最后,
// 有内存没有被释放(未被标记的),那就提示出在第几行存在内存泄漏

#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new (_NORMAL_BLOCK,__FILE__,__LINE__)  // 这个就是检测工具
#define new DBG_NEW

#endif // !DBG_NEW
#endif


// 这个在代码结束之前,使用打印是否还有为释放的内存

// 在代码结束处输出内存泄露信息  // 在调试的输出窗口输出

_CrtDumpMemoryLeaks(); //  当执行到这句,如果还有没释放的内存,就打印处在第几行

示例代码:

#define _CRTDBG_MAP_ALLOC  // 像一个开关,去开启一些功能
#include <stdlib.h>
#include <crtdbg.h>

#include <iostream>
#include <Windows.h>
#include <string.h>
#include <errno.h>

// 接管new操作符  原理: 就是使用新定义的DBG_NEW去替换代码中的new,然后它会将内存管理起来,已经释放的打上标记,如果执行到最后,
// 有内存没有被释放(未被标记的),那就提示出在第几行存在内存泄漏
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new (_NORMAL_BLOCK,__FILE__,__LINE__)  // 这个就是检测工具
#define new DBG_NEW

#endif // !DBG_NEW
#endif

// 我们可以在调试模式下,添加上面的代码,进行内存泄漏的检测, 但是在发布版本时,基本就没有什么问题了,加上会增加容量,所以
// 发布时就将添加的代码都删除掉

int main(void)
{
	// 内存泄漏的例子
		int* a = new int[10];

		a = new int;
		delete a;

	// 在代码结束处输出内存泄露信息  // 在调试的输出窗口输出
	_CrtDumpMemoryLeaks(); //  当执行到这句,如果还有没释放的内存,就打印处在第几行

	system("pause");

	return 0;
}

上面的代码:发生了内存泄漏-------- a指向了10个int的空间,没有释放,就直接将a又指向了一个新的内存。 

 上面代码,加上之前的调试语句,执行:

如上图,在红圈位置找(输出窗口) 

 

上图就是从输出窗口,找到的内存泄漏的提示信息: 已经给出了哪个文件的第几行,我们只需要找到释放内存即可。 

注意:  以上我们添加的代码都是为了检测是否有内存泄漏,属于调试性的代码, 所以我们在发行的时候应该将加入的为了调试的代码删除掉,否则会占空间。

相关推荐

  1. go语言内存泄漏检查工具

    2024-01-01 15:00:06       29 阅读
  2. C++ 内存泄漏检测工具——Valgrind(Linux系统)

    2024-01-01 15:00:06       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-01 15:00:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-01 15:00:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-01 15:00:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-01 15:00:06       20 阅读

热门阅读

  1. Resilience4j相关面试题及答案

    2024-01-01 15:00:06       38 阅读
  2. 6.6 会话与输入事件(三)

    2024-01-01 15:00:06       36 阅读
  3. AI多多:人工智能的魅力与无限可能

    2024-01-01 15:00:06       43 阅读
  4. zdppy_api框架快速入门

    2024-01-01 15:00:06       36 阅读
  5. 书摘:C 嵌入式系统设计模式 04

    2024-01-01 15:00:06       31 阅读
  6. 数位DP LeetCode 600 不含连续1的非负整数

    2024-01-01 15:00:06       39 阅读
  7. 无重复字符的最长子串(刷题日常)

    2024-01-01 15:00:06       42 阅读
  8. LeetCode 每日一题 Day 25|| 简单模拟

    2024-01-01 15:00:06       39 阅读
  9. TypeScript快速入门

    2024-01-01 15:00:06       27 阅读
  10. SSH 连接与RDP连接

    2024-01-01 15:00:06       31 阅读
  11. 【Kotlin】协程

    2024-01-01 15:00:06       39 阅读
  12. 数据库读写分离是个什么mysql怎么配置

    2024-01-01 15:00:06       36 阅读