检查`malloc`是否在C中成功
我想使用malloc
分配内存并检查它是否成功。 就像是:
if (!(new_list=(vlist)malloc(sizeof (var_list)))) return -1;
我如何检查成功?
malloc
在失败时返回空指针。 因此,如果您收到的不是null,那么它指向一个有效的内存块。
由于NULL
在if
语句中的计算结果为false,因此您可以以非常简单的方式检查它:
value = malloc(...); if(value) { // value isn't null } else { // value is null }
手册页:
如果成功,
calloc()
,malloc()
,realloc()
,reallocf()
和valloc()
函数将返回指向已分配内存的指针。 如果有错误,则返回NULL
指针并将errno
为ENOMEM
。
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;
– 你如何处理调用函数中的问题取决于你,真的。