希望这不是一个完全愚蠢的问题。无论如何...
当将空指针传递给free
时会发生什么。
谢谢!
P.S.标准兼容的分配器呢?再次感谢!
希望这不是一个完全愚蠢的问题。无论如何...
当将空指针传递给free
时会发生什么。
谢谢!
P.S.标准兼容的分配器呢?再次感谢!
它立即返回而不执行任何操作。
根据第7.20.3.2段的第3段:
该自由函数导致指针ptr指向的空间被释放,即为进一步分配提供了可用空间。如果ptr是null指针,则不执行任何操作。否则,如果参数与之前由calloc、malloc或realloc函数返回的指针不匹配,或者如果空间已通过调用free或realloc释放,则其行为未定义。
man page中写道:
free()函数释放ptr所指向的内存空间,这个指针必须是之前通过调用malloc()、calloc()或realloc()返回的。否则,如果之前已经调用了free(ptr),或者ptr为NULL,则会发生未定义的行为。
如果ptr为NULL,则不执行任何操作。
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;
}
auto_ptr
来代替吗? - Billy ONeal
free
以这种方式运作。丑陋的包装器要么基于城市传说,要么是为了支持某些损坏的非标准伪C实现。 - R.. GitHub STOP HELPING ICEN119
于1990年6月18日
发布以来,我就开始使用C语言了,而我们使用的版本中绝对没有空指针问题。 - Martin York