7

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

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

我的假设是调用free(). 因此,在调用free()函数之前进行简单的逻辑检查可能是非常必要的。


tl;博士版,

内部发生了什么调用free()可能会使在释放之前首先检查指针是否为 NULL 的效率或多或少?

4

3 回答 3

10

C标准保证调用free(NULL)是无害的并且没有效果。因此,除非您认为调用free()NULL 指针表明您在程序的其他地方出现了逻辑错误,否则没有理由仔细检查。

于 2013-09-12T22:57:41.710 回答
8

不要自己检查是否为空。free无论如何都必须这样做,并且保证在使用空指针调用时什么也不做。就那么简单。

于 2013-09-12T22:57:20.393 回答
4

开放组规范free()规定:

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

这意味着 的实施free()可能会从以下效果开始:

if (ptr == NULL)
    return;

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

于 2013-09-12T22:58:09.880 回答