用于确保指针在释放之前不为空,所以我通常会破坏动态创建的结构,如下所示:
Node *destroy_node(Node *node) {
if (node) {
free(node);
}
return NULL;
}
但是CERT MEM34表明,由于free()接受空指针,我还可以写
Node *destroy_node(Node *node) {
free(node);
return NULL;
}
这是对的吗?
答案 0 :(得分:1)
是的,将NULL
(空指针常量)传递给free()
完全有效。
引用C11
,章节§7.22.3.3,(强调我的)
free
函数导致ptr
指向的空间被释放,即 可供进一步分配。 如果ptr
是空指针,则不会执行任何操作。 [...]
答案 1 :(得分:0)
是的,将NULL
传递给free
是无操作。
摘自n1570(C11最终稿):
7.22.3.3自由功能 简介
1 #include void free(void * ptr);
说明
2 free函数导致ptr指向的空间被释放,即可用于进一步分配。如果ptr是空指针,则不执行任何操作。否则,如果参数与先前由内存管理函数返回的指针不匹配,或者如果通过调用free或realloc释放了空间,则行为未定义。
返回
3 free函数不返回任何值。