不久前,我从互联网上下载了一份源代码。其中有几个malloc调用,在此之后没有检查是否为NULL。据我所知,在调用malloc后需要检查是否为NULL。
是否有人故意不检查malloc调用后的NULL?我有什么遗漏吗?
不久前,我从互联网上下载了一份源代码。其中有几个malloc调用,在此之后没有检查是否为NULL。据我所知,在调用malloc后需要检查是否为NULL。
是否有人故意不检查malloc调用后的NULL?我有什么遗漏吗?
malloc()
返回错误时,您的程序很可能已经陷入麻烦了。当程序很可能无法正常工作时,是否有意义添加大量的错误处理代码来处理这种情况呢?对于许多程序来说,答案可能是“否”,但对于其他一些程序来说,做出适当的处理可能非常重要。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;
}
malloc()
返回错误时完成某些复杂的任务,则需要相应的保护措施来确保您可以在非常低内存的情况下完成这些任务。通常这意味着额外的复杂性,而且可能并不总是值得去尝试。他们根本不关心意外崩溃!
在使用malloc时,很有可能会立即存储一些内容。因此,如果您没有检查NULL,那么当尝试在那里存储某些内容时,程序可能随后崩溃。
在小程序中,请求少量内存时,malloc几乎不会失败,因此malloc不会返回NULL。
但是,在我看来,即使在小程序中,进行NULL检查
也通常是个好习惯。
malloc
无法提供更多,你能做些什么呢?NULL
。