如果分配不当,我应该释放 C 中的内存吗?

Should I free memory in C if it is not allocated properly?

当声明例如 malloc 然后检查它是否为 NULL 以查看它是否已正确分配时,如果它为 null 我是否应该释放内存,例如:

int *p;
p = (int *)malloc(sizeof(int)); 
  
    if (p == NULL)
    {
        free(p); //Should I free here or will it create an error?
        return NULL;
    }    

如果 malloc returns 一个空指针,它根本无法分配任何东西,并且没有任何东西可以释放。

话虽如此,将空指针传递给 free 什么都不做,所以它是安全的。

在相关说明中,在 C 中你真的不应该 cast the result of malloc

Should I free memory in C if it is not allocated properly?

你不应该,因为你不能,因为事实证明这个问题甚至没有意义。

malloc 要么为您提供指向正确分配的内存的指针,要么没有。
这两种情况是不同的:它要么给你一个非空指针,要么给你一个空指针。
空指针 return 表示 malloc 失败,没有为您分配任何内存。

假设在尝试但未能分配您请求的内存的过程中,malloc 确实部分分配了一些内存或其他东西。假设释放它是你的工作。你会怎么做?你无法引用那段记忆!当 malloc 失败时,它 return 给你一个空指针,根据定义,空指针指向任何地方。

将空指针传递给 free 函数没有多大意义。曾几何时,这是一个错误,而且往往会崩溃。今天,它是无害的:free 检查您是否向它传递了一个空指针,如果是,它什么都不做。

所以事实上,如果 malloc 部分分配内存或其他东西,然后失败,它必须是 malloc 的工作来自动清理它,然后 return指向你的空指针。