为什么可以用空指针调用 free ?

Why is it okay to call free with null pointer?

从 C 标准可以清楚地看出,NULLfree() 的可接受输入,结果是不执行任何操作。但是,这似乎违反了 free() 只能在使用 malloc()calloc()realloc().

显式分配的内存上调用的想法

此异常背后的原因是什么?我能想到的唯一原因是调用者不必在调用 free().

之前显式检查 NULL

如果请求的大小为 0,malloc 函数(以及 callocrealloc)可能 return 一个 NULL 指针。因此,这是有道理的NULL 指针也可以传递给 free,因为它是 return 从成功调用 malloc 得到的:

C standard 的第 7.22.3p1 节指定了此行为:

If the space cannot be allocated, a null pointer is returned. If the size of the space requested is zero, the behavior is implementation-defined: either a null pointer is returned, or the behavior is as if the size were some nonzero value, except that the returned pointer shall not be used to access an object.