web-dev-qa-db-ja.com

`malloc`がCで成功したことを確認する

mallocを使用してメモリを割り当て、成功したことを確認したいと思います。何かのようなもの:

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

成功を確認するにはどうすればよいですか?

11
SIMEL

mallocは、失敗するとnullポインタを返します。したがって、受け取ったものがnullでない場合は、有効なメモリブロックを指します。

NULLifステートメントでfalseと評価されるため、非常に簡単な方法で確認できます。

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

マニュアルページ:

成功した場合、calloc()malloc()realloc()reallocf()、およびvalloc()関数は割り当てられたメモリへのポインタを返します。エラーが発生した場合は、NULLポインターを返し、errnoENOMEMに設定します。

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

あなたがすでにエラーをテストしているコードですが、私は通常、割り当てを記述し、2つの別々の行としてチェックします。

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

(2つの小さな変更に注意してください。戻り値をキャストしないでください。不一致の可能性を減らすために、型ではなく変数からサイズを取得します)。

malloc()が失敗すると、nullポインターが返されます。これは、falseである唯一のポインター値です。

あなたが持っているエラー処理は単に_return -1;_です-呼び出し関数でそれをどのように処理するかは本当にあなた次第です。

1
Toby Speight