動的なメモリ割り当て(dynamic allocation)とは、プログラムの実行中に必要に応じてメモリを割り当てる処理のこと。これまで使ってきた変数は、必要なメモリがコンパイル時に固定されているのに対して、動的なメモリ割り当ては実行時にメモリを割り当てることができる。
メモリを割り当てるには、malloc() 関数を使う。
void *malloc(size_t numbytes);
引数の「numbytes」は割り当てたいメモリのバイト数で、戻り値は割り当てられたメモリブロックの先頭を指すポインタ。メモリ割り当てに失敗した時にはヌルポインタを返す。
動的に割り当てたメモリが必要なくなったら、メモリを開放しなければいけない。これには free() 関数を使う。
void free(void *ptr);
もっとも、プログラムが終了すると、割り当てられていたメモリは全て自動的に解放される。
例えば入出力用のバッファなんかは一時的にメモリが必要になるので、malloc() でメモリを割り当て、要らなくなったら free() で解放する。
次のプログラムは、ユーザの入力(文字列)を受け取るメモリブロックを動的に割り当て、必要がなくなったら解放している。
#include #include int main(void) { char *p; p = (char *)malloc(80); if (!p) { printf("Fail to allocate.\n"); exit(1); } printf("Input string: "); gets(p); printf("%s\n", p); free(p); return 0; }
takatoh@nightschool $ ./sample_12_7 Input string: Hello! Hello!