可能重复:
checking for NULL before calling free
What happens when you try to free() already freed memory in c?
希望这不是一个完全愚蠢的问题。总之...
将空指针传递给free
时会发生什么。
谢谢!
P.S。标准兼容分配器怎么样?再次感谢!
答案 0 :(得分:11)
它会立即返回而不做任何事情。
根据7.20.3.2,第3段:
free函数导致ptr指向的空间被释放,即被释放 可供进一步分配。 如果ptr是空指针,则不执行任何操作。否则,如果参数与calloc,malloc或realloc函数先前返回的指针不匹配,或者如果空间已被调用解除分配为了释放或重新分配,行为是未定的。
答案 1 :(得分:3)
man page说:
free()释放指向的内存空间 通过ptr,一定是 之前的电话回复 malloc(),calloc()或realloc()。 否则,或者如果已经免费(ptr) 以前被称为未定义 行为发生。 如果ptr为NULL,则为no 执行操作。
答案 2 :(得分:1)
free(ptr)
为ptr
, NULL
应该不执行任何操作。
在实际编程中,此功能有助于使您的代码更简单:
class YourClass
{
public:
YourClass()
{
m_ptr = (int*)malloc(sizeof(int));
//Validate m_ptr and perform other initialization here
}
~YourClass()
{
// You don't have to validate m_ptr like this
// if (m_ptr)
// {
// delete m_ptr;
// }
// Instead, just call free(m_ptr)
// Notice: generally you should avoid managing the pointer by yourself,
// i.e., RAII like smart pointers is a better option.
free(m_ptr);
}
private:
int *m_ptr;
}