当前位置:  开发笔记 > 编程语言 > 正文

在调用free之前检查NULL

如何解决《在调用free之前检查NULL》经验,为你挑选了3个好方法。

许多C代码释放指针调用:

if (p)
  free(p);

但为什么?我认为C标准说在free给定NULL指针的情况下函数不会做任何事情.那为什么要另外明确检查?



1> 小智..:

构造:

free(NULL);

在C中一直很好,回到Dennis Ritchie编写的原始UNIX编译器.预标准化,一些糟糕的编译器可能没有正确地使用它,但是现在任何编译器都不能合法地称自己为C语言的编译器.使用它通常会产生更清晰,更易于维护的代码.



2> Tom..:

据我所知,NULL上的no-op并不总是存在.

在C的糟糕时期(早在1986年,在ANSI标准cc编译器之前),free(NULL)会转储核心.因此大多数开发人员在调用free之前都会测试NULL/0.

世界已经走过了漫长的道路,似乎我们不再需要进行测试了.但是老习惯很难;)

http://discuss.joelonsoftware.com/default.asp?design.4.194233.15


那天乔尔被引用为技术权威对于人类来说是一个悲伤的日子.

3> Remo.D..:

我倾向于写" if (p) free(p)很多",即使我知道它不需要.

我部分地责备自己,因为我学习了C过去的时候free(NULL)会发生段错误,我还是觉得不舒服.

但我也责怪C标准不一致.例如,fclose(NULL)是否可以很好地定义,我写作时不会遇到问题:

free(p);
fclose(f);

在清理东西时经常会发生这种情况.不幸的是,写作似乎很奇怪

free(p);
if (f) fclose(f);

我最终得到了

if (p) free(p);
if (f) fclose(f);

我知道,这不是一个理性的原因,但这是我的情况:)

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有