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

SIM*_*MEL 10 c malloc

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

if (!(new_list=(vlist)malloc(sizeof (var_list))))
  return -1;
Run Code Online (Sandbox Code Playgroud)

我该如何检查成功?

Eti*_*tel 21

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

由于NULLif语句中求值为false ,因此可以非常直接的方式检查它:

value = malloc(...);
if(value)
{
    // value isn't null
}
else
{
    // value is null
}
Run Code Online (Sandbox Code Playgroud)

  • 只要NULL合适,就可以使用零,但NULL不为零.它是NULL.但它总是评估为假. (3认同)
  • 在C中(与C++不同)`(void*)0`是一个空指针常量.那是因为C中的`void*`指针(与C++不同)可以隐式转换为任何其他指针类型,因此可以允许NULL具有`void*`类型.因此,在两种语言中,NULL是实现定义的空指针常量,但C实现具有更大的自由度. (2认同)

Spy*_*ros 6

手册页:

如果成功的话,calloc(),malloc(),realloc(),reallocf(),和valloc()函数返回一个指向分配的内存.如果有错误,则返回NULL指针并设置errnoENOMEM.


jde*_*aan 6

new_list=(vlist)malloc(sizeof (var_list)
if (new_list != NULL) {
  /* succeeded */
} else {
  /* failed */
}
Run Code Online (Sandbox Code Playgroud)