惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
博客园 - Franky
V
V2EX
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
T
The Blog of Author Tim Ferriss
罗磊的独立博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Jina AI
Jina AI
博客园 - 叶小钗
F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
D
Docker
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志

博客园 - sizzle

ruby函数回调的实现方法 软件单元测试之我见 在COM中使用数组参数-SafeArray[转载] 指针赋值 - sizzle - 博客园 进程的深度隐藏 文件隐藏 Windows下网络数据报的监听和拦截技术 三键屏蔽 键盘知识 如何获取当前程序文件的路径 Net Remoting[转自Bruce Zhang's Blog] 解码 XML 和 DTD 【读书笔记】[Effective C++第3版][第27条]尽量不要使用类型转换 P2P之UDP穿透NAT的原理与实现 CommandBinding用法 窗体显示中Form.Show()和Form.ShowDialog()的区别 一段高深代码--未解 使用C#注销/关闭计算机 TEA加密算法的C/C++实现
非空判断
sizzle · 2008-05-31 · via 博客园 - sizzle

今天调查内存泄漏,发现一块申请的堆未释放,于是加了一段释放代码
if(!pbuffer)
{
    TaskMemFree(pbuffer);
}

运行程序,发现仍然泄漏,继续检查其余代码,没发现问题,正在郁闷中,发现单步调试不能走到
释放代码内部,一看条件判断,晕!写了个无效代码,pbuffer为空时才会执行释放操作,改为
if(pbuffer)
{
    TaskMemFree(pbuffer);
}

问题解决!
看来写代码时显示判断还是保险些啊,如果当初写成
if(pbuffer != NULL)
{
    TaskMemFree(pbuffer);
}
就不会出现这样的问题了。

另外发现,堆分配时要做好配对,TaskMemAlloc要与TaskMemFree一起用,
New和Delete一起用,尤其在调用方法负责分配空间,调用者负责释放时,要
做好约定,有次用TaskMemAlloc分配的空间,但用Delete释放掉了,造成内
存泄漏,奇怪的是当时用Release版本,编译器不能检查出来,但用Debug版
本就提示出错了。