内存泄露

1:堆内存泄漏:对内存指的是程序运行中根据需要分配通过malloc,realloc new等从堆中分配的一块内存,再是完成后必须通过调用对应的 free或者delete 删掉。如果程序的设计的错误导致这部分内存没有被释放,那么此后这块内存将不会被使用,就会产生Heap Leak.

2:系统资源泄露:主要指程序使用系统分配的资源比如 Bitmap,handle ,SOCKET等没有使用相应的函数释放掉,导致系统资源的浪费,严重可导致系统效能降低,系统运行不稳定。

3:如何解决内存泄露?
3.1:malloc\realloc —— free;new \new[] ———- delete \delete[]
3.2:RAII:资源获取即初始化: 若希望保持对某个重要资源的跟踪,那么创建一个对象,并将资源的生命周期和对象的生命周期相关联.
3.3:重载 new 和 delete。
3.4,Boost 中的smart pointer: 利用share_ptr来管理内存:boost::shared_ptr < connection > p ( new connection());
3.5Visual Leak Detector是一款免费的检查内存泄露的工具.
3.6:利用库检测内存泄露信息

#define _CRTDBG_MAP_ALLOC  //如果没有这个宏定义,我们只能知道有内存泄露,却无法知道在哪个地方申请内存忘记了释放
#include <stdlib.h>
#include <crtdbg.h>
int main(void)
{
    char *p = (char *)malloc(sizeof(char) * 100);
    _CrtDumpMemoryLeaks();
}

WinGbg

使用u 命令查看当前正在执行的代码,k 命令查看当前调用堆栈
续用~命令来查看被调试进程中的线程信息
bp 命令是最常用的断点命令bp TestDebug1!main
bl 命令用于查看已存在的断
bd 命令禁用断点、be 命令重新启用断点
bc 命令删除上面的1 号断点
bu TestDebugDll1!TestDllAdd 对TestDebugDll1.exe 中的TestDllAdd 函数设置未定断点
ba 命令用于设置访问断点ba w4 @@C++(&i)命令。“&i”在C++语法中表示变量i 的地址,“w”表示写入操作,“4”表示只处理&i 地址处4 字节的写入操作。
以d 开头的d*系列命令用于查看内存值。命令的第二个字符用于指定按何种数据类型查看该内存中的数据:如db 是按BYTE 类型查看,dd 是按DWORD 类型查看。
!analyze -v,这是windbg提供的一个自动分析命令,正常情况下,会显示出导致崩溃的行为,其所在文件,以及其在文件中的具体行数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的资料库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值