calloc

配列に、要素を 0 に初期化してメモリに割り当てます。

void *calloc( 
   size_t num,
   size_t size 
);

パラメーター

  • num
    要素の数。

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

戻り値

calloc は、割り当てられた領域へのポインターを返します。 戻り値が指す記憶領域は、どの型のオブジェクトを格納する場合でも、適切に配置されます。 void 以外の型へのポインターを得るには、戻り値に型キャストを行います。

解説

calloc 関数は、それぞれの長さが size バイトの num 個の要素を持つ配列に対して記憶領域を割り当てます。 各要素は 0 に初期化されます。

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

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

_set_new_mode(1)

リンク オプション」を参照してください。

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

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

必要条件

ルーチン

必須ヘッダー

calloc

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

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

使用例

// crt_calloc.c
// This program uses calloc to allocate space for
// 40 long integers. It initializes each element to zero.
 
#include <stdio.h>
#include <malloc.h>

int main( void )
{
   long *buffer;

   buffer = (long *)calloc( 40, sizeof( long ) );
   if( buffer != NULL )
      printf( "Allocated 40 long integers\n" );
   else
      printf( "Can't allocate memory\n" );
   free( buffer );
}
  

同等の .NET Framework 関数

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

参照

参照

メモリ割り当て

free

malloc

realloc