通常のC言語プログラムでは、必要な変数だけを宣言して使いますが、
実行時によって使いたい変数の数が増えたり減ったりするプログラムを
作りたい場合があります。
こういった場合に動的メモリを使います。
#include <stdio.h>
void main(void) {
int* p;
// 動的メモリ確保
p = (*int)malloc(sizeof(int)*3);
p[0] = 10;
p[1] = 20;
p[2] = 30;
printf("%d\n", p[0]+p[1]+p[2]);
// 解放処理
free(p);
}
malloc 関数で動的にメモリを確保しています。
引数は、確保するバイト数を指定します。
この場合、int型のサイズ4バイト x 3 としているので、12バイト確保されます。
malloc 関数の戻り値はvoidポインタ型なので、
必要に応じた型にキャストして使います。
ここでは、int*型にキャストして使用可能にしています。
確保したら、あとは、普通のポインタとして使えます。
そして、確保した動的メモリが必要なくなったら、
free 関数で解放してあげます。
この解放処理を怠ると、
その領域が確保されたままになってしまい、非効率です。
アプリケーションが終了すると、
動的メモリは自動的に解放されるようになっていますが、
365日中動作するようなアプリケーションを組む場合に
動的メモリの解放を忘れると、
そのアプリケーションが動的メモリを使いすぎて
他のシステムに障害を与えてしまう事もあり得ます。
確保したら必ず解放するように管理・設計する事が重要です。