如果分配不当,我应该释放 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指向你的空指针。
当声明例如 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指向你的空指针。