为什么可以用空指针调用 free ?
Why is it okay to call free with null pointer?
从 C 标准可以清楚地看出,NULL
是 free()
的可接受输入,结果是不执行任何操作。但是,这似乎违反了 free()
只能在使用 malloc()
、calloc()
或 realloc()
.
显式分配的内存上调用的想法
此异常背后的原因是什么?我能想到的唯一原因是调用者不必在调用 free()
.
之前显式检查 NULL
如果请求的大小为 0,malloc
函数(以及 calloc
和 realloc
)可能 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.
从 C 标准可以清楚地看出,NULL
是 free()
的可接受输入,结果是不执行任何操作。但是,这似乎违反了 free()
只能在使用 malloc()
、calloc()
或 realloc()
.
此异常背后的原因是什么?我能想到的唯一原因是调用者不必在调用 free()
.
NULL
如果请求的大小为 0,malloc
函数(以及 calloc
和 realloc
)可能 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.