你能知道free()是否在C中成功而没有崩溃?

Mat*_*Mut 4 c free

malloc()如果分配不成功,则返回空指针.free()遗憾的是,不会重新分配是否成功,因为其签名是:

void free(void* ptr)
Run Code Online (Sandbox Code Playgroud)

是否有可能:

  1. free()在没有调试器为您崩溃应用程序的情况下尝试并知道释放是否成功?

  2. 事先free()得到指针是否会导致失败或成功?

Lun*_*din 12

就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();
}
Run Code Online (Sandbox Code Playgroud)

如果您需要更高级的错误处理,则必须使用特定于操作系统的API函数.

  • 细节:"指向...来自malloc()等于你传递给free()的指针,然后free()将永远成功." 有一个例外,就是在同一个分配的指针上调用`free()`两次是UB. (4认同)