gpt4 book ai didi

c - 为什么有些人在调用 malloc 后不检查 NULL?

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

前段时间从网上下载了一个源码。有几个 malloc 调用,之后没有检查 NULL。据我所知,您需要在调用 malloc 后检查 NULL。

有人在调用 malloc 后不检查 NULL 是否有充分的理由?我错过了什么吗?

最佳答案

正如 Jens Gustedt 在评论中提到的那样,当 malloc() 返回错误时,您的程序可能已经陷入了一堆麻烦之中。当程序可能无法做任何事情时,放入一堆错误处理代码来处理这种情况是否有意义?对于许多程序,答案可能是否定的,对于其他程序,做一些适当的事情可能非常重要。

您可以尝试通过一个简单的“malloc-or-die”包装函数分配您的内存,该函数保证分配成功或程序将终止:

void* m_malloc(size_t size)
{

void* p;

// make sure a size request of `0` doesn't trigger
// an error situation needlessly
if (size == 0) size = 1;

p = malloc(size);

if (!p) {
// attempt to log the error or whatever
abort();
}

return p;
}

您随后遇到的一个问题是,除了终止程序外,您无能为力。即使记录问题也可能需要一些内存分配,因此记录工具可能会有自己的问题(除非您的分配失败是由于尝试分配不合理的大内存块)。

您可能会尝试通过在您的程序中尽早分配一个“故障安全” block 来解决该问题,当您需要记录问题时可以释放该 block (我认为有相当多的程序使用此策略)。但是您愿意为这种错误处理投入多少工作取决于您的特定需求。如果您的程序需要确保在 malloc() 返回错误时完成一些非常复杂的事情,您将需要有相应的保护措施以确保您可以做那些事情内存非常低的情况下的事情。通常这意味着额外的复杂性,而且可能并不总是值得付出努力。

关于c - 为什么有些人在调用 malloc 后不检查 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10157778/

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