C/C++ 入門

ホーム > 標準 C ライブラリ > malloc と calloc によるメモリ割当て

malloc と calloc によるメモリ割当て

C 言語では値を保持する場合は、何らかの形でメモリーを確保する必要があります。

メモリを割り当てるには、malloc 関数があります。

malloc 関数 の使い方を見てみましょう。

malloc 関数と calloc 関数の違い

次の例では 4 バイト分のメモリを割り当てて、そのメモリ領域に順番に 'a', 'b', 'c', 0 という風に値を書き込んでいます。

#include <stdio.h>
#include <stdlib.h>

void main()
{
	char* p = NULL;

	p = (char*) malloc(4);
	if(!p){
		return;
	}

	p[0] = 'a';
	p[1] = 'b';
	p[2] = 'c';
	p[3] = 0;

	printf("%s\n", p);

	free(p);

	return;
}

メモリを使い終わったら、free 関数でその領域を解放します。

ちなみに、ここでは「char のサイズが 1 バイトなので 1 文字 1 バイトで書き込める」ということを前提として操作していることに注意してください。

「char のサイズで 4 文字書き込めるサイズのメモリを割り当てよう」という意図をハッキリコードに書くならば、malloc の引数は次のように記述するべきです。

	p = (char*) malloc( sizeof(char) * 4);

変数1個分のサイズと、その個数を引数に受け取るメモリ割当関数は calloc です。

calloc を利用すると、上と同様のことは次のようにかけます。

#include <stdio.h>
#include <stdlib.h>

void main()
{
	char* p = NULL;

	p = (char*) calloc( 4, sizeof(char) );
	if(!p){
		return;
	}

	p[0] = 'a';
	p[1] = 'b';
	p[2] = 'c';
	p[3] = 0;

	printf("%s\n", p);

	free(p);

	return;
}
ホーム > 標準 C ライブラリ > malloc と calloc によるメモリ割当て