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

推荐订阅源

雷峰网
雷峰网
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
The Cloudflare Blog
博客园_首页
J
Java Code Geeks
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
量子位
C
Check Point Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
N
Netflix TechBlog - Medium
Hugging Face - Blog
Hugging Face - Blog
B
Blog
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
宝玉的分享
宝玉的分享
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
Last Week in AI
Last Week in AI

博客园 - 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版
本就提示出错了。