_recalloc
realloc
と calloc
の組み合わせです。 メモリ内の配列を再割り当てし、その要素を 0 に初期化します。
構文
void *_recalloc(
void *memblock
size_t num,
size_t size
);
パラメーター
memblock
以前に割り当てられていたメモリ ブロックへのポインター。
number
要素の数。
size
各要素の長さ (バイト単位)。
戻り値
_recalloc
は、再割り当てされた (移動された可能性もある) メモリ ブロックへの void
ポインターを返します。
ブロックを特定のサイズまで拡張するのに十分なメモリがない場合、元のブロックは変更されず、 NULL
が返されます。
要求されたサイズがゼロの場合は、memblock
によってポイントされているブロックが解放されます。戻り値は NULL
で、memblock
は解放されたブロックをポイントしたままです。
戻り値は、どの型のオブジェクトのストレージの場合でも、適切に整列されたストレージ領域を指します。 void
以外の型へのポインターを取得するには、戻り値の型キャストを使用します。
解説
_recalloc
関数は、割り当てられたメモリ ブロックのサイズを変更します。 memblock
引数はメモリ ブロックの先頭をポイントします。 memblock
が NULL
の場合、_recalloc
は calloc
と同様に動作し、number
* size
バイトの新しいブロックを割り当てます。 各要素は 0 に初期化されます。 memblock
がNULL
されていない場合は、calloc
、malloc
、またはrealloc
の前の呼び出しによって返されるポインターである必要があります。
新しいブロックは新しいメモリ位置に配置できるため、 _recalloc
によって返されるポインターは、 memblock
引数を介して渡されるポインターであるとは限りません。
メモリの割り当てに失敗した場合、または要求されたメモリ量が _HEAP_MAXREQ
を超える場合、_recalloc
は errno
を ENOMEM
に設定します。 このエラー コードやその他のエラー コードについては、「errno
、_doserrno
、_sys_errlist
、および _sys_nerr
」を参照してください。
recalloc
は、C++ の _set_new_mode
関数を使用して新しいハンドラー モードを設定するために realloc
を呼び出します。 新しいハンドラー モードは、エラーが発生したときに、realloc
が _set_new_handler
によって設定された新しいハンドラー ルーチンを呼び出すかどうかを指定します。 realloc
では、既定で、メモリの割り当てエラーの際に新しいハンドラー ルーチンを呼び出しません。 この既定の動作をオーバーライドすると、_recalloc
がメモリの割り当てに失敗したときに、realloc
演算子が同じ理由で失敗したときと同じ方法で、new
によって新しいハンドラー ルーチンを呼び出すことができます。 既定の動作をオーバーライドするには、次の関数を呼び出します。
_set_new_mode(1);
この呼び出しはプログラムの最初の方で指定するか、NEWMODE.OBJ にリンクします。
アプリケーションが C のランタイム ライブラリのデバッグ バージョンにリンクされている場合、_recalloc
は _recalloc_dbg
として解決されます。 デバッグ プロセス中にヒープを管理する方法の詳細については、「 CRT デバッグ ヒープを参照してください。
_recalloc
が __declspec(noalias)
と __declspec(restrict)
でマークされている場合、この関数ではグローバル変数を変更せず、返されるポインターがエイリアス化されない保証があることを意味します。 詳細については、次のトピックを参照してください。 noalias
および restrict
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
_recalloc |
<stdlib.h> および <malloc.h> |
互換性の詳細については、「 Compatibility」を参照してください。
関連項目
メモリ割り当て
_recalloc_dbg
_aligned_recalloc
_aligned_offset_recalloc
free
リンク オプション