4590
- 收藏
- 点赞
- 分享
- 举报
在c++程序里面检查内存泄露
检查内存泄露
1、在程序段的开始位置建立一个CmemoryState对象,调用其成员函数Checkpoint,取得当前的内存使用情况的快照;
2、在程序段的结束位置执行步骤1的操作,获得当前的内存使用情况的快照;
3、建立一个Cmemorystate对象,调用其成员函数Difference,以前两步的对象作为它的参数。如果两次内存快照不同,则该函数返回非0,说明该程序段存在内存泄露。
例子:
CmemoryState oldMemoryState, newMemoryState, checkMemoryState;
oldMemoryState.Checkpoint();
……//测试程序段
newMemoryState.Checkpoint();
if(checkMemoryState.Difference(oldMemoryState, newMemoryState))
{
AfxMessageBox(“存在内存泄露!”);
}
创建第三个 CMemoryState 对象,并调用其 Difference 成员函数,将前两个 CMemoryState 对象作为参数提供。如果这两个内存状态之间有差异,则 Difference 函数返回非零值。这指示有些内存块尚未被释放。
本示例显示相应的代码:
复制代码
// Declare the variables needed
#ifdef _DEBUG
CMemoryState oldMemState, newMemState, diffMemState;
oldMemState.Checkpoint();
#endif
// Do your memory allocations and deallocations.
CString s("This is a frame variable");
// The next object is a heap object.
CPerson* p = new CPerson( "Smith", "Alan", "581-0215" );
#ifdef _DEBUG
newMemState.Checkpoint();
if( diffMemState.Difference( oldMemState, newMemState ) )
{
TRACE( "Memory leaked!\n" );
}
#endif
请注意内存检查语句由 #ifdef _DEBUG / #endif 块括起来,以便它们只在程序的 Win32“Debug”版本中被编译。
既然知道了存在内存泄漏,便可以使用另一个成员函数 CMemoryState::DumpStatistics 来查看内存统计,它将帮助您定位内存泄漏。
1、在程序段的开始位置建立一个CmemoryState对象,调用其成员函数Checkpoint,取得当前的内存使用情况的快照;
2、在程序段的结束位置执行步骤1的操作,获得当前的内存使用情况的快照;
3、建立一个Cmemorystate对象,调用其成员函数Difference,以前两步的对象作为它的参数。如果两次内存快照不同,则该函数返回非0,说明该程序段存在内存泄露。
例子:
CmemoryState oldMemoryState, newMemoryState, checkMemoryState;
oldMemoryState.Checkpoint();
……//测试程序段
newMemoryState.Checkpoint();
if(checkMemoryState.Difference(oldMemoryState, newMemoryState))
{
AfxMessageBox(“存在内存泄露!”);
}
创建第三个 CMemoryState 对象,并调用其 Difference 成员函数,将前两个 CMemoryState 对象作为参数提供。如果这两个内存状态之间有差异,则 Difference 函数返回非零值。这指示有些内存块尚未被释放。
本示例显示相应的代码:
复制代码
// Declare the variables needed
#ifdef _DEBUG
CMemoryState oldMemState, newMemState, diffMemState;
oldMemState.Checkpoint();
#endif
// Do your memory allocations and deallocations.
CString s("This is a frame variable");
// The next object is a heap object.
CPerson* p = new CPerson( "Smith", "Alan", "581-0215" );
#ifdef _DEBUG
newMemState.Checkpoint();
if( diffMemState.Difference( oldMemState, newMemState ) )
{
TRACE( "Memory leaked!\n" );
}
#endif
请注意内存检查语句由 #ifdef _DEBUG / #endif 块括起来,以便它们只在程序的 Win32“Debug”版本中被编译。
既然知道了存在内存泄漏,便可以使用另一个成员函数 CMemoryState::DumpStatistics 来查看内存统计,它将帮助您定位内存泄漏。
我来回答
回答0个
时间排序
认可量排序
暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2015-11-20 17:57:57
-
2020-11-30 12:15:02
-
2019-01-08 11:04:57
-
2008-07-12 18:42:29
-
2021-03-05 13:13:27
-
2018-12-27 15:38:36
-
2020-02-26 19:44:13
-
2019-03-06 10:37:34
-
2018-12-02 10:10:39
-
2022-12-14 11:29:12
-
2020-12-12 12:34:59
-
2016-11-25 11:36:19
-
2019-01-04 16:02:58
-
2019-01-18 15:46:58
-
2008-11-15 12:47:57
-
2019-12-10 19:04:13
-
2024-02-20 15:49:06
-
2013-12-23 22:45:34
-
2008-08-25 18:16:26
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认