配列を用いずに、動的にメモリを確保する方法として、としても動作します。上記の意味は、char *data; data = (char *)malloc(sizeof(char)*10); strcpy(data, "start");ことを意味します(メモリ上の状態は、1.1の図と同等の結果になります)。
- メモリ空間上に文字型の箱を10個用意し、
- その先頭のアドレスをポインタ変数 data に代入し、
- strcpy()関数を使って、アドレス data から文字列 "start" をメモリ上に コピーする
mallocを利用する場合の注意点は以下の通りです。
- 必ずメモリが確保できるとは限らない。 確保できない場合は NULL 値が返るので、返り値のチェックをするのが望ましい。
- 自動変数と異なり、明示的に開放しなければ、たとえプログラム内で 利用しなくなっても開放されない。 関数 void free(void* ) を利用して明示的に開放することができる。