gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:11:30 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com