检查`malloc`是否在C中成功

我想使用malloc分配内存并检查它是否成功。 就像是:

 if (!(new_list=(vlist)malloc(sizeof (var_list)))) return -1; 

我如何检查成功?

malloc在失败时返回空指针。 因此,如果您收到的不是null,那么它指向一个有效的内存块。

由于NULLif语句中的计算结果为false,因此您可以以非常简单的方式检查它:

 value = malloc(...); if(value) { // value isn't null } else { // value is null } 

手册页:

如果成功, calloc()malloc()realloc()reallocf()valloc()函数将返回指向已分配内存的指针。 如果有错误,则返回NULL指针并将errnoENOMEM

 new_list=(vlist)malloc(sizeof (var_list) if (new_list != NULL) { /* succeeded */ } else { /* failed */ } 

您已经测试过错误的代码,虽然我通常会编写赋值并检查两个单独的行:

 new_list = malloc(sizeof *new_list); if (!new_list) /* error handling here */; 

(注意两个小的变化 – 你不应该转换返回值,我们从变量而不是它的类型中获取大小以减少不匹配的可能性)。

如果malloc()失败,则返回一个空指针,这是唯一的false指针值。

您的error handling只是return -1; – 你如何处理调用函数中的问题取决于你,真的。