calloc
0 に初期化された配列の要素にメモリを割り当てます。
void *calloc(
size_t num,
size_t size
);
パラメーター
num
要素の数。size
各要素のバイト単位の長さ。
戻り値
calloc割り当てられた領域へのポインターを返します。戻り値が指すストレージ領域が適切にどの型のオブジェクトを格納するために配置されることが保証されます。void 以外の型へのポインターを取得するには戻り値の型キャストを使用してください。
解説
calloc の関数は num の要素の配列と長さの size の各バイトのストレージ領域を割り当てます。各要素は0 に初期化されます。
calloc は ENOMEM にメモリ割り当てに失敗するか要求されたメモリの量が _HEAP_MAXREQ を超えた場合 errno を設定します。この変更およびそのほかのエラー コードの詳細についてはerrno、_doserrno、_sys_errlist、および _sys_nerr を参照してください。
新しいハンドラー モードを設定するにはC++ _set_new_mode の関数を使用する calloc の呼び出し malloc。新しいハンドラー モードはエラーが発生した場合malloc が _set_new_handler に設定した新しいハンドラー ルーチンを呼び出すかどうかを示します。既定ではmalloc にメモリを割り当てる失敗の new ハンドラー ルーチンを呼び出していません。同じ理由で失敗すると new の演算子はcalloc がメモリを割り当てるとmalloc が新しいハンドラー ルーチンと同じ方法で呼び出すように既定の動作をオーバーライドできます。既定値をオーバーライドするにはを呼び出します。
_set_new_mode(1)
高速 NEWMODE.OBJ のプログラムまたはリンク (リンク オプション を参照してください。
アプリケーションが C ランタイム ライブラリのデバッグ バージョンとリンクしたときcalloc は _calloc_dbg に解決されます。詳細についてはヒープがデバッグ中にマネージ方法についてはCRT デバッグ ヒープ を参照してください。
calloc はグローバル変数を変更しないように関数が保証できない返されたポインターが JIT エイリアス化したことを意味するのマークされた __declspec(noalias) と __declspec(restrict) です。詳細についてはnoalias と 制限します。 を参照してください。
必要条件
ルーチン |
必須ヘッダー |
---|---|
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 を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。