如何释放空指针

时间:2011-06-13 01:54:39

标签: c++ c

  

可能重复:
  checking for NULL before calling free
  What happens when you try to free() already freed memory in c?

希望这不是一个完全愚蠢的问题。总之...

将空指针传递给free时会发生什么。

谢谢!

P.S。标准兼容分配器怎么样?再次感谢!

3 个答案:

答案 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;
}