malloc()
如果分配不成功则返回空指针。不幸的是,free()
不会返回释放是否成功,因为它的签名是:
void free(void* ptr)
是否可以:
尝试
free()
并在调试器没有为您崩溃应用程序的情况下知道释放是否成功?事先了解在指针上调用
free()
会导致失败还是成功?
最佳答案
就 C 标准而言:
如果您从 malloc()
返回的指针等于您传递给 free()
的指针,则 free()
总会成功的。唯一可用的错误检查是将指针与原始地址的副本进行比较,然后再将其传递给 free()
。示例:
type_t* foo = malloc(sizeof(*foo));
type_t* const original = foo;
...
if(foo == original)
{
free(foo);
}
else
{
halt_and_catch_fire();
}
如果您需要比这更高级的错误处理,则必须使用特定于操作系统的 API 函数。
关于你能知道 free() 在 C 中是否成功而不崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36551136/