处理malloc错误的巧妙方法,而不检查每次malloc调用后是否返回NULL?

Rac*_*hel 7 c

在我的代码中,几乎每个函数都有一个或多个malloc调用,每次我必须执行以下操作:

char *ptr = (char *)malloc(sizeof(char) * some_int);
if (ptr == NULL) {
    fprintf(stderr, "failed to allocate memory.\n");
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

这是额外的四行代码,如果我在使用malloc后每次添加它们,我的代码长度会增加很多..那么有一种优雅的方法来处理这个问题吗?

非常感谢!!

Han*_*ant 6

在消耗所有内存时尝试偶然发现通常没什么意义.不妨叫它退出:

char* allocCharBuffer(size_t numberOfChars) 
{
    char *ptr = (char *)malloc(sizeof(char) * numberOfChars);
    if (ptr == NULL) {
        fprintf(stderr, "failed to allocate memory.\n");
        exit(-1);
    }
    return ptr;
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*Jon 3

抱歉,但是在 C 中你对此无能为力。除了...喘气...将其全部包装在一个宏中,该宏将自动执行if检查并允许您每次编写自定义错误处理代码。在那里,我说了。

说真的,C 并不是为了提供这样的便利。如果您不介意当场退出程序,您可以将其包装在一个函数中,当然该函数会exit在分配失败时执行 - 但这不是通用的解决方案。

  • 或者将其包装在函数而不是宏中。 (4认同)
  • @WTP:该函数的问题在于它可以检测条件,但不能真正处理它。至少如果你不付出如此大的努力,你最好在每个调用站点使用 4 行代码。至少据我所知。 (2认同)