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

标签 c free

malloc() 如果分配不成功则返回空指针。不幸的是,free() 不会返回释放是否成功,因为它的签名是:

void free(void* ptr)

是否可以:

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

  2. 事先了解在指针上调用 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/

相关文章:

c - ocaml 顶级和 native 库

c - 为什么将数组作为参数传递时有一个自由维度?

c++ delete[] 二维数组导致堆损坏

c - free() 导致 SEG 故障 C

c - C 中的星号空格 - 额外的空格是什么意思?

动态分配和填充 2 个矩阵、验证较小的一个是否是另一个矩阵的子集并检查条件的 C 程序

linux new/delete, malloc/free 大内存块

c - 为什么 line2 中的 free 使 memcpy 什么都不做? malloc之前是free的吗??

c - 如何从“月”,“周”,星期几获取日期

c - NDIS lwf(协议(protocol))驱动程序是否需要在Windows中签署数字签名使用?