3

realloc(void *ptr, size_t new_size)NULL次の 2 つの場合に返されます。

  • 十分なメモリがない場合、古いメモリ ブロックは解放されず、NULL が返されます。
  • エラーが発生した場合も NULL が返されます。

発生した問題の種類を知るにはどうすればよいですか?

メモリが不足している場合は、一部のメモリをディスクにページングすることがあります。

するべきかどうかをどうやって知ることができfree(ptr)ますか? (おそらく、realloc によって既に解放されている可能性があります)。

4

6 に答える 6

1

解放 (ptr) する必要があるかどうかはどうすればわかりますか? (おそらく、realloc によって既に解放されている可能性があります)

realloc返される唯一の現実的な理由*NULLは、十分なメモリがなく、それに対してできることがほとんどない場合です。

また、失敗した場合でもreallocメモリが解放されることはないため、常に自分で処理する必要があります。


※またはサイズ0で呼び出した場合

于 2013-04-12T07:11:42.543 に答える
1

http://linux.die.net/man/3/reallocから

ノート:

UNIX 98 標準では、障害時に malloc()、calloc()、および realloc() が errno を ENOMEM に設定する必要があります。glibc は、これが行われていることを前提としています (そして、これらのルーチンの glibc バージョンはこれを行っています)。errno を設定しないプライベート malloc 実装を使用すると、特定のライブラリ ルーチンが errno に理由なしで失敗する場合があります。

于 2013-04-12T07:11:30.583 に答える
0

ほとんど - realloc の実装に依存します。

ただし、一般的には、 realloc が最初に割り当てたことがないため、 free(ptr) する必要はありません (したがって、NULL が返されます)。

realloc でヒープ サイズを増やすことができなかったかどうかを判断するには、ERRNO 番号を確認してください。Malloc/Calloc/Realloc が ERRNO を ENOMEM に設定 (要求を処理するのに十分な記憶領域がありません)

于 2013-04-12T07:11:58.820 に答える
0

失敗した場合realloc()( を返すNULL)、free()自分でポインタを指定する必要があります。心配する唯一の奇妙なケースは、新しいサイズが 0 の場合です。

于 2013-04-12T07:11:20.770 に答える
0

メモリ不足の場合errnoENOMEM. また、realloc失敗した場合、ポインタで渡したメモリは解放されません。

于 2013-04-12T07:11:23.703 に答える