C语言malloc返回NULL,C API设计:当malloc返回NULL时该怎么办?

比方说,我正在C编写一个小图书馆 – 一些数据结构。如果我无法分配内存,该怎么办?

这可能是非常重要的,例如我需要一些内存来初始化数据结构,或者我插入一个键值对,并希望将它包装在一个小的结构体中。它也可能不那么关键,例如像一个pretty_print函数,建立一个很好的字符串表示的内容。但是,通常比您的平均错误更严重 – 可能还没有一点继续。如果返回NULL,那么大量的使用malloc在线的例子只是直接退出程序。我猜测很多真正的客户端代码也是这样 – 只是弹出一些错误,或者写到stderr,并中止。 (并且很多真正的代码可能根本不检查malloc的返回值。)

有时返回NULL是有意义的,但并不总是。错误代码(或只是一些布尔成功值),无论是作为返回值还是外部参数都可以正常工作,但似乎他们可能会混乱或者伤害了API的可读性(然后再次,也许这在C语言中有些预期? )。另一个选择是具有某种内部错误状态,呼叫者可以随后查询,例如。使用get_error函数,但是您必须注意线程安全性,可能很容易错过;人们往往对于检查错误来说很松懈,如果它是一个单独的功能,他们可能不知道它们,或者他们可能不会打扰(但是我猜这是他们的问题)。

(我有时会看到malloc包装在一个函数中,只是再次尝试,直到内存可用…

void *my_malloc(size_t size)

{

void *result = NULL;

while (result == NULL)

result = malloc(size);

return result;

}

但这似乎是愚蠢的,也许是危险的。)

什么是正确的方法来处理?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值