動的メモリ
ポインタと配列はとても、相性がいいといいましたが、 ポインタと配列を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型のポインタなので、どの型の変数なのかを コンパイラに知らせてやる為に型変換(キャスト)をしています。
型変換とは:型変数の範囲をそろえる意味で行う操作で、メモリ上のデータをどのような型で、 取り出すのかを決めるものです。
