C语言预防内存泄漏的新方法
时间:2010-07-21
来源:互联网
而C语言就很无助了.要么增加新语法,要么在写法上做些预防.
内存申请和释放像一对双胞胎,释放多了少了都成问题:
char* buff=(char*)malloc(80);
...
free(buff); //必须一次
观察C++中析构的时机,它总出现在}之时,我们也可以利用{}这对双胞胎来帮忙:
{ char* buff=(char*)malloc(80);
...
free(buff); //必须一次
}
规则就是:紧跟{后同一行的是申请;紧挨}行前的是释放.分析一下这么写的效果:
1. 申请与{在同一行,容易辨认检查
2. 释放紧挨}也容易辨认检查
3. 如果忘了释放,也会少写},肯定编译不过
4. 申请的变量只在{}有效,在后面重复释放也编译不过
还是有些效果的,但写法让人不舒服, 因为{}关系到缩进,也不利于搜索,改进一下:
#define _ {
#define __ }
_ char* buff=(char*)malloc(80);
...
free(buff);
__
_像后缩,__像空行,很容易辨认, 如果申请了多个资源变量,多个__可以合并在一行:
_ char* buff=(char*)malloc(80);
...
_ CThis t;
CThis_CThis(&t); //构造
...
CThis_(&t); //析造
free(buff);
__ __
当然这种写法肯定不能解决所有问题,在_和__之间的break continue和return不受约束.
但代码比原来清晰,也比原来容易检查出错误.
最后,我给出一个彻底解决释放的问题,就是增加新语法:
{
: //无名标号,不能跳过
}
在 {}中加入可选的:,break continue和return都必须执行.
作者: pan_0326 发布时间: 2010-07-21
作者: hellioncu 发布时间: 2010-07-21

作者: donglongchao 发布时间: 2010-07-21
作者: ecjtubaowp 发布时间: 2010-07-21
作者: mirnshi 发布时间: 2010-07-21



你以为申请的内存一定会在一个函数内释放吗?
作者: vbs100 发布时间: 2010-07-21




难为你打了这么多字
作者: zliming 发布时间: 2010-07-21
vbs100 发表于 2010-07-21 10:36
这句话是重点!
作者: w_anthony 发布时间: 2010-07-21
作者: xxw19840406 发布时间: 2010-07-21
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28