C言語編 標準ライブラリのリファレンス calloc

先頭へ戻る

calloc関数

概要 動的にメモリ領域を確保し、0 で初期化する
ヘッダ stdlib.h
形式 void* calloc(size_t n, size_t size);
引数 n 確保する区画の個数。
0 を指定した場合の動作については、取り決めが無い。
size 確保する領域の大きさを、バイト単位で指定する。
0 を指定した場合の動作は処理系定義。
戻り値 確保された領域の先頭を指すポインタ。メモリ不足などの要因で失敗した場合には、ヌルポインタが返される。
要求した大きさが 0 の場合は、ヌルポインタが返されるか、何らかの有効なメモリアドレスが返されるかのいずれかである。後者の場合は、そのメモリアドレスを参照してはならない。
詳細 確保された領域の各バイトは 0 で初期化される。
確保された領域が不要になったら、free関数で解放(システムへ返却)できる。
ちなみに、calloc の 'c' は Cell(区画)から来ている。
注意 システムがメモリ領域を管理するための追加の領域が必要なため、実際に割り当てられる大きさは、size を超える可能性がある。
割り当てられた領域の各バイトは 0 で初期化されているが、全ての型にとって、0 が初期値として適切であるとは限らない。例えば、浮動小数点数において、0 というビットが並んだ状態が、0.0 を表現しているかどうかは、その環境での浮動小数点数の表現の仕方による。
使用例
#include <stdio.h>
#include <stdlib.h>

#define ALLOCATE_SIZE	(10)

int main(void)
{
    int* values;
    int i;

    values = calloc( ALLOCATE_SIZE, sizeof(int) );
    if( values == NULL ){
        exit( EXIT_FAILURE );
    }

    for( i = 0; i < ALLOCATE_SIZE; ++i ){
        printf( "%d ", values[i] );
    }
    printf( "\n" );

    for( i = 0; i < ALLOCATE_SIZE; ++i ){
        values[i] = i;
    }

    for( i = 0; i < ALLOCATE_SIZE; ++i ){
        printf( "%d ", values[i] );
    }
    printf( "\n" );

    free( values );

    return 0;
}

実行結果:

0 0 0 0 0 0 0 0 0 0
0 1 2 3 4 5 6 7 8 9
関連 realloc関数は領域の再確保を行う。また、より一般的な動的メモリ割り当て関数として、malloc関数がある。
解説章 第35章


参考リンク



更新履歴

'2018/4/20 「NULL」という表記を「ヌルポインタ」に修正。

'2018/4/6 全体的に表現を修正。

'2018/1/29 使用例の中で、記号定数名が間違っていてコンパイルできなかったのを修正。
説明文についても、全体的に見直した(主に、関連する関数の内容との整合性の調整)

'2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ


はてなブックマーク Pocket に保存 Twitter でツイート Twitter をフォロー
Facebook でシェア Google+ で共有 LINE で送る rss1.0 取得ボタン RSS
管理者情報 プライバシーポリシー