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

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

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


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 = calloc(ALLOCATE_SIZE, sizeof(int));
    if (values == NULL) {
        exit(EXIT_FAILURE);
    }

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

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

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

    free(values);
}

実行結果:

0 0 0 0 0 0 0 0 0 0
0 1 2 3 4 5 6 7 8 9

関連

realloc関数は領域の再確保を行う。また、0 による初期化を行わない malloc関数がある。

解説章

第35章


参考リンク


更新履歴

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

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

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

’2018/1/22 新規作成。



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

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

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

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る