apiao

apiao

0个粉丝

26

问答

0

专栏

8

资料

apiao  发布于  2008-07-12 18:54:24
采纳率 0%
26个问答
4583

在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 来查看内存统计,它将帮助您定位内存泄漏。
我来回答
回答0个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区