请问没有没有资源泄露检测的工具推荐的? 最近有个软件貌似有资源泄露,不确定应该怎么找。想找个工具来检测下。谢谢推荐。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 抱歉,补充下。我说的是 gdi资源 泄露。不是堆内存。 谢谢 linglongyouzhi,我去看看。 据我浮浅的理解。vld是检测对内存泄露的吧。请指教:对gdi资源的泄露可以检查么? 在任务管理器中就能看出来程序使用gdi句柄的多少,要是一直增加,结合你程序就能判断是否有泄漏了 用过BounderCheck还不错,有两种模式,很容易上手。也可以自己写代码,转一下别人的:VC程序内存泄漏检测(转载)1. 包含头文件和定义:#define _CRTDBG_MAP_ALLOC#include <stdlib.h>#include <crtdbg.h>如果定义了_CRTDBG_MAP_ALLOC,打印出来的是文件名和行数等更加直观的信息。2. 方法一在程序入口写几个语句: int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ); tmpFlag |= _CRTDBG_LEAK_CHECK_DF; _CrtSetDbgFlag( tmpFlag );程序退出时,如果发现有内存泄漏,会自动在DEBUG OUTPUT窗口和DebugView中输出内存泄漏信息。Ex.#define _CRTDBG_MAP_ALLOC#include <stdlib.h>#include <crtdbg.h>int main(int argc, char* argv[]){ int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ); tmpFlag |= _CRTDBG_LEAK_CHECK_DF; _CrtSetDbgFlag( tmpFlag ); int* p=new int[2]; //delete [] p; return 0;}3. 方法二在程序任何地方用以下语句:_CrtDumpMemoryLeaks();随时检测打印内存泄漏信息,如果有的话。不过此用法有个局限,对于一些全局函数,如果初始化时申请了内存,到程序结束时候才释放,此函数会一直把新申请的内存当作泄漏来对待。4. 方法三使用_CrtMemCheckpoint方法,在某段程序中统计泄漏信息。如下: _CrtMemState s1, s2, s3; _CrtMemCheckpoint( &s1 ); // 程序段1:DO SOMETHING _CrtMemCheckpoint( &s2 ); if ( _CrtMemDifference( &s3, &s1, &s2) ) _CrtMemDumpStatistics( &s3 );可以统计程序段1中是否发生了内存泄漏。Ex.void CMfcmemleakDlg::OnOK() { // TODO: Add extra validation here _CrtMemState s1, s2, s3; // 声明内存状态结构变量 _CrtMemCheckpoint( &s1 );// 获取第一个内存状态快照 // 在这里进行内存分配 char* p = new char[2]; p[0] = 'A'; p[1] = 'B'; _CrtMemCheckpoint( &s2 );// 获取第二个内存状态快照 // 比较两个内存快照的差异 if ( _CrtMemDifference( &s3, &s1, &s2) ) _CrtMemDumpStatistics( &s3 );// dump 差异结果 // 输出内存泄漏报告,显示在 Output 窗口的 Debug 页中 _CrtDumpMemoryLeaks(); AfxMessageBox("MFC 程序内存泄漏检测试验");} 内嵌汇编的问题。。 谁有自绘的或者贴图的Spin控件 如何把html中的相对路径变成绝对路径 请教一个正则表达式的问题 结构的转换 关于CDialog的方法问题 关于分裂视图中,如果在窗口大小改变之后,使每个视图都相应的改变大小(变成多大自己控制) ??? 使用SQL做的数据库应用程序,怎么移植到其他机器上运行? 求助:请教一个socket的基本问题! 哪位大俠可以賜教:哪裡有autocad文件格式的文檔 在右键菜单中添加子项无反应 IPHlpApi的使用问题
1. 包含头文件和定义:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
如果定义了_CRTDBG_MAP_ALLOC,打印出来的是文件名和行数等更加直观的信息。2. 方法一
在程序入口写几个语句:
int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
_CrtSetDbgFlag( tmpFlag );
程序退出时,如果发现有内存泄漏,会自动在DEBUG OUTPUT窗口和DebugView中输出内存泄漏信息。Ex.
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>int main(int argc, char* argv[])
{
int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
_CrtSetDbgFlag( tmpFlag ); int* p=new int[2]; //delete [] p; return 0;
}3. 方法二
在程序任何地方用以下语句:
_CrtDumpMemoryLeaks();
随时检测打印内存泄漏信息,如果有的话。不过此用法有个局限,对于一些全局函数,如果初始化时申请了内存,到程序结束时候才释放,此函数会一直把新申请的内存当作泄漏来对待。4. 方法三
使用_CrtMemCheckpoint方法,在某段程序中统计泄漏信息。如下:
_CrtMemState s1, s2, s3;
_CrtMemCheckpoint( &s1 );
// 程序段1:DO SOMETHING _CrtMemCheckpoint( &s2 );
if ( _CrtMemDifference( &s3, &s1, &s2) )
_CrtMemDumpStatistics( &s3 );可以统计程序段1中是否发生了内存泄漏。Ex.
void CMfcmemleakDlg::OnOK()
{
// TODO: Add extra validation here
_CrtMemState s1, s2, s3; // 声明内存状态结构变量
_CrtMemCheckpoint( &s1 );// 获取第一个内存状态快照 // 在这里进行内存分配
char* p = new char[2];
p[0] = 'A';
p[1] = 'B'; _CrtMemCheckpoint( &s2 );// 获取第二个内存状态快照 // 比较两个内存快照的差异
if ( _CrtMemDifference( &s3, &s1, &s2) )
_CrtMemDumpStatistics( &s3 );// dump 差异结果 // 输出内存泄漏报告,显示在 Output 窗口的 Debug 页中
_CrtDumpMemoryLeaks(); AfxMessageBox("MFC 程序内存泄漏检测试验");
}