calloc
要素を 0 に初期化した配列のメモリを割り当てます。
構文
void *calloc(
size_t number,
size_t size
);
パラメーター
number
要素の数。
size
各要素の長さ (バイト単位)。
戻り値
calloc
は、割り当てた領域へのポインターを返します。 戻り値によって指されるストレージ・スペースは、任意のタイプのオブジェクトのストレージ用に適切にアラインされます。 void
以外の型へのポインターを取得するには、戻り値の型キャストを使用します。
解説
calloc
関数は、それぞれが size
バイトの長さである要素 number
個を持つ配列のための記憶域を割り当てます。 各要素は 0 に初期化されます。
calloc
を実行したときに、メモリの割り当てに失敗した場合、または要求されたメモリ量が errno
を超える場合は、ENOMEM
が _HEAP_MAXREQ
に設定されます。 このエラー コードやその他のエラー コードについては、「errno
、_doserrno
、_sys_errlist
、および _sys_nerr
」を参照してください。
Microsoft の実装では、number
または size
がゼロの場合、calloc
ではゼロではないサイズの割り当て済みブロックへのポインターを返します。 返されたポインターに対して読み取りまたは書き込みを試みると、未定義の動作が発生します。
calloc
では、C++ の _set_new_mode
関数を使用して "新しいハンドラー モード" を設定します。 新しいハンドラー モードは、エラーが発生したときに、calloc
が _set_new_handler
によって設定された新しいハンドラー ルーチンを呼び出すかどうかを指定します。 calloc
では、既定で、メモリの割り当てエラーの際に新しいハンドラー ルーチンを呼び出しません。 この既定の動作をオーバーライドすると、calloc
では、メモリの割り当てに失敗したときに、new
演算子が同じ理由で失敗したときと同じ方法で、新しいハンドラー ルーチンを呼び出すことができます。 既定の動作をオーバーライドするには、次の関数を呼び出します。
_set_new_mode(1);
プログラムの早い段階で、または NEWMODE.OBJ
にリンクします ( リンク オプションを参照してください)。
アプリケーションが C のランタイム ライブラリのデバッグ バージョンにリンクされている場合、calloc
は _calloc_dbg
として解決されます。 デバッグ プロセス中にヒープを管理する方法の詳細については、「 CRT デバッグ ヒープを参照してください。
calloc
が __declspec(noalias)
と __declspec(restrict)
でマークされている場合、この関数ではグローバル変数を変更せず、返されるポインターがエイリアス化されない保証があることを意味します。 詳細については、次のトピックを参照してください。 noalias
および restrict
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
calloc |
<stdlib.h> および <malloc.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
// 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 );
}
Allocated 40 long integers