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