无论如何都要释放空指针或先检查?

时间:2013-09-12 22:54:53

标签: c pointers memory free

假设我在一个程序中遇到一个实例,我会释放一个NULL指针,或者首先检查它是否为NULL并跳过free()函数调用。

简单地释放NULL指针会更有效吗?我搜索了一下,显然,对于C89之后的实现,释放NULL指针是无害的 - 所以决定归结为效率。

我的假设是,在调用free()时可能会产生相当大的开销。因此,在调用free()函数之前,可能需要进行简单的逻辑检查。


tl;博士版,

在调用free()时,内部发生了什么,这可能会使得在释放之前首先检查或指针是否为NULL效率更高或更低?

3 个答案:

答案 0 :(得分:8)

C标准保证调用free(NULL)是无害的并且没有效果。因此,除非您认为在NULL指针上调用free()表示您的程序中的其他位置存在逻辑错误,否则没有理由仔细检查它。

答案 1 :(得分:7)

请勿自行检查是否存在空值。无论如何free已经必须这样做,并且在使用空指针调用时保证不执行任何操作。就这么简单。

答案 2 :(得分:4)

The Open Group specification for free()声明:

  

如果ptr是空指针,则不会发生任何操作。

这意味着free()的实现可能会从以下内容开始:

if (ptr == NULL)
    return;

这将产生很少的开销。没有保证,但是在进行检查之前,函数可以做很多工作,因此不必自行检查。