次の方法で共有


_recalloc

realloccalloc の組み合わせです。 メモリ内の配列を再割り当てし、その要素を 0 に初期化します。

構文

void *_recalloc(
   void *memblock
   size_t num,
   size_t size
);

パラメーター

memblock
以前に割り当てられていたメモリ ブロックへのポインター。

number
要素の数。

size
各要素の長さ (バイト単位)。

戻り値

_recalloc は、再割り当てされた (移動された可能性もある) メモリ ブロックへの void ポインターを返します。

ブロックを特定のサイズまで拡張するのに十分なメモリがない場合、元のブロックは変更されず、 NULL が返されます。

要求されたサイズがゼロの場合は、memblock によってポイントされているブロックが解放されます。戻り値は NULL で、memblock は解放されたブロックをポイントしたままです。

戻り値は、どの型のオブジェクトのストレージの場合でも、適切に整列されたストレージ領域を指します。 void 以外の型へのポインターを取得するには、戻り値の型キャストを使用します。

解説

_recalloc 関数は、割り当てられたメモリ ブロックのサイズを変更します。 memblock 引数はメモリ ブロックの先頭をポイントします。 memblockNULL の場合、_recalloccalloc と同様に動作し、number * size バイトの新しいブロックを割り当てます。 各要素は 0 に初期化されます。 memblockNULLされていない場合は、callocmalloc、またはreallocの前の呼び出しによって返されるポインターである必要があります。

新しいブロックは新しいメモリ位置に配置できるため、 _recalloc によって返されるポインターは、 memblock 引数を介して渡されるポインターであるとは限りません。

メモリの割り当てに失敗した場合、または要求されたメモリ量が _HEAP_MAXREQ を超える場合、_recallocerrnoENOMEM に設定します。 このエラー コードやその他のエラー コードについては、「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
リンク オプション