次の方法で共有


_recalloc

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

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

パラメーター

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

  • num
    要素の数。

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

戻り値

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

指定のサイズまでブロックを拡張するだけのメモリ領域がない場合、元のブロックは変更されず、NULL が返されます。

要求されたサイズがゼロの場合、memblock が指すブロックは解放され、NULL が返され、memblock は解放されたブロックを指したままになります。

戻り値が指すメモリ領域は、どの型のオブジェクトを格納する場合でも、適切にアライメントされます。 void 以外の型へのポインターを得るには、戻り値に型キャストを行います。

解説

recalloc 関数は、既に割り当てられているメモリ ブロックのサイズを変更します。 引数 memblock は、メモリ ブロックの先頭を指します。 memblock が NULL の場合、recalloc 関数は calloc 関数と同様に動作し、num * size バイトの新しいブロックを割り当てます。 各要素は 0 に初期化されます。 memblock を NULL 以外にする場合は、以前に呼び出した calloc、malloc、または realloc のいずれかの関数によって返されたポインターを渡します。

再割り当てされた新しいブロックは、メモリ内の別の位置に割り当てられることがあるため、recalloc 関数の戻り値が、引数 memblock で渡したポインターと異なる場合があります。

_recalloc設定errnoにENOMEMメモリ割り当てに失敗した場合、またはメモリの量を超える要求する場合_HEAP_MAXREQ。 このエラー コードおよびその他のエラー コードの詳細については、「errno、_doserrno、_sys_errlist、および _sys_nerr」を参照してください。

recalloc は realloc を呼び出し、C++ の _set_new_mode 関数を使用し、new ハンドラー モードを設定します。 メモリの割り当てに失敗した場合、new ハンドラーのモードに応じて、realloc 関数が _set_new_handler で設定されている new ハンドラー ルーチンを呼び出すかどうかが決まります。 既定では、realloc 関数はメモリの割り当てに失敗しても new ハンドラー ルーチンを呼び出しません。 既定の動作をオーバーライドすると、new 演算子がメモリの割り当てに失敗したときと同じように、recalloc 関数がメモリの割り当てに失敗した場合にも、realloc 関数は new ハンドラーのルーチンを呼び出すことができます。 既定の動作をオーバーライドするには、プログラムの始めの方で次の関数を呼び出すか、または NEWMODE.OBJ とリンクします。

_set_new_mode(1)

アプリケーションが C ランタイム ライブラリのデバッグ バージョンとリンクされている場合、_recalloc は _recalloc_dbg として解釈されます。 デバッグ中のヒープの処理方法の詳細については、「CRT デバッグ ヒープ」を参照してください。

_recalloc には __declspec(noalias) と __declspec(restrict) のマークが付けられます。これは、関数がグローバル変数を変更しないことを保証し、返されるポインターがエイリアス指定されないことを意味します。 詳細については、「noalias」および「restrict」を参照してください。

必要条件

ルーチン

必須ヘッダー

_recalloc

<stdlib.h> および <malloc.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

同等の .NET Framework 関数

該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

参照

メモリ割り当て

_recalloc_dbg

_aligned_recalloc

_aligned_offset_recalloc

free

概念

リンク オプション