c - free()之前是否需要检查指针是否为空

标签 c pointers memory-management struct free

Ì 用于在释放指针之前确保指针不为空,因此我通常会销毁动态创建的结构,如下所示:

Node *destroy_node(Node *node) {
    if (node) {
        free(node);
    }
    return NULL;
}

但是CERT MEM34建议既然 free() 接受空指针,我也可以写

Node *destroy_node(Node *node) {
    free(node);
    return NULL;
}

正确吗?

最佳答案

是的,将NULL(空指针常量)传递给free()是完全有效的。

引用 C11,第 §7.22.3.3 章,(强调我的)

The free function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation. If ptr is a null pointer, no action occurs. [...]

关于c - free()之前是否需要检查指针是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40546675/

相关文章:

c++ - Hinnant 的 short_alloc 和对齐保证

ios - Cocos2d 和 iOS : how to deal with dealloc methods of static CCScene

c - 你如何遍历一个指针?

无法理解c中负数的右移运算符运算

c - fscanf 没有正确扫描输入?

c语言+二维数组

c - 如何将 8 字节 void 指针(包括字符)打印为十六进制

c - 是否有一种故障安全方法来确定 C 中指针的对齐/尾随位?

c++ - 取消引用被转换为双指针的指针

android - 在android中通过JNI在C代码中打开文件时获取NULL