calloc() — ストレージの予約と初期化
形式
#include <stdlib.h>
void *calloc(size_t num, size_t size);言語レベル
ANSI
スレッド・セーフ
はい
説明
calloc() 関数は、各長さ size バイトの num 個のエレメントの配列用にストレージ・スペースを予約します。 calloc() 関数は、各エレメントのすべてのビットに初期値 0を与えます。
戻り値
calloc() 関数は、予約済みスペースを指すポインターを戻します。 戻り値が示すストレージ・スペースは、任意のタイプのオブジェクトのストレージ用に適切に位置合わせされます。 型を指すポインターを取得するには、戻り値に対して型キャストを使用します。 十分なストレージがない場合、または num または size が 0の場合、戻り値は NULL です。
注:
- すべてのヒープ・ストレージは、呼び出し関数の活動化グループと関連付けられます。 したがって、ストレージの割り振り、割り振り解除、および再割り振りは同じ活動化グループ内で行ってください。 1 つの活動化グループ内でヒープ・ストレージを割り振って、そのストレージを異なる活動化グループから割り振り解除したり、再割り振りすることはできません。 活動化グループについての詳細は、「ILE 概念」のマニュアルを参照してください。
- C ソース・コードを変更せずに、単一レベル・ストア・ストレージの代わりにテラスペース・ストレージを使用する場合、コンパイラー・コマンドで TERASPACE(*YES *TSIFC) パラメーターを指定します。 これにより、
calloc()ライブラリー関数が、対応するテラスペース・ストレージである_C_TS_calloc()にマップされます。_C_TS_calloc()への各呼び出しにより割り振り可能なテラスペース・ストレージの最大量は、2GB - 224 バイト、つまり 2,147,483,424 バイトです。テラスペース・ストレージについて詳しくは、「ILE 概念」のマニュアルを参照してください。
- 高速プール・メモリー・マネージャーが現行の活動化グループ内で使用可能にされている場合、ストレージは高速プール・メモリー・マネージャーを使用して検索されます。 詳しくは、_C_Quickpool_Init ()-高速プール・メモリー・マネージャーの初期化 を参照してください。
例
次の例は必要な数の配列エントリーを求めるプロンプトを出し、それからエントリー用にストレージ内に十分なスペースを予約します。
calloc() が正常に実行されると、この例では各項目が出力されます。それ以外の場合は、エラーが出力されます。#include <stdio.h>
#include <stdlib.h>
int main(void)
{
long * array; /* start of the array */
long * index; /* index variable */
int i; /* index variable */
int num; /* number of entries of the array*/
printf( "Enter the size of the array\n" );
scanf( "%i", &num);
/* allocate num entries */
if ( (index = array = (long *) calloc( num, sizeof( long ))) != NULL )
{
for ( i = 0; i < num; ++i ) /* put values in arr */
*index++ = i; /* using pointer no */
for ( i = 0; i < num; ++i ) /* print the array out */
printf( "array[%i ] = %i\n", i, array[i] );
}
else
{ /* out of storage */
perror( "Out of storage" );
abort();
}
}
/****************** Output should be similar to: **********************
Enter the size of the array
array[ 0 ] = 0
array[ 1 ] = 1
array[ 2 ] = 2
*/