動的メモリ

ポインタと配列はとても、相性がいいといいましたが、 ポインタと配列を1つにして、管理してしまうC言語の関数があります。 それが、「malloc」(エムアロック)というメモリ割付を行う関数です。 「malloc」は「memory allocate」という英語から名づけられていますので、 「メモリを割り当てる」という意味があります。

「malloc」関数の、戻り値はポインタで、引数(入力)は、指定された型や構造体より決まるサイズ(バイト数)です。 関数内では、入力に従った大きさのメモリを確保します。この関数は、ポインタと配列を組み合わせた、とても便利な関数です。 (mallocを使う場合には、ヘッダーファイル「stdlib.h」が必要です。1バイト=8ビット)

「malloc」関数がメモリを確保する状態を、以下のサンプルプログラムで確かめてください。

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

int main(void)
{
	int *pointer;		/* メモリ用ポインター定義 */
	int i;

	/* メモリの割り付け=整数型・intを10個メモリに確保する */	
	pointer = (int*)malloc(sizeof(int) * 10);		

	/* これは、同時に整数型配列を確保した事と同じ */
	for(i=0; i<10; i++) pointer[i] = i*10;

	for(i=0; i<10; i++) {
	printf("メモリの%d番目の値=%d\n", i, *(pointer + i));
	}

	free(pointer);			/* メモリの解放 */

	return 0;
}

メモリを確保して、不要になったら、「free」という関数で、メモリを解放(無効)にします。 「(int*)malloc」は、この関数の戻り値が、void型のポインタなので、どの型の変数なのかを コンパイラに知らせてやる為に型変換(キャスト)をしています。

型変換とは:型変数の範囲をそろえる意味で行う操作で、メモリ上のデータをどのような型で、 取り出すのかを決めるものです。

サンプルソース(avaloky5b.cpp)

サイト紹介
サイトマップ
C言語入門
Web制作入門
Web素材集
フリーソフト紹介
リンク集
関連書籍の紹介
連絡フォーム

C言語入門
28a←[28b]→29