メモリの動的管理

1. 配列の動的確保

C言語やC++において,配列を作成するには

と記述すれば,int型の10個の要素を持つ配列が作成できます.
ただし,この記述方法ではコンパイル時に配列のサイズが決定していなければならないので,固定のサイズしか生成できません.
上記の例では10個という固定サイズになります.
このような配列の作成を静的確保 (static allocation)と呼びます.

これに対して,任意のサイズの配列をプログラム実行中に生成する方法を動的確保 (dynamic allocation)と呼びます.
C言語において,配列を動的に確保するには,malloc( )でメモリに割り当て,free( )でメモリに割り当てた領域を解放できます.
C++ではこれらの代わりに,newでメモリに割り当て,deleteでメモリの解放を行うことができます.
これらの演算子を使ってint型の10個の要素を持つ配列を動的に確保するには,以下のように記述します.

2行に分けて書きましたが,以下のように1行で記述することもできます.

C++では,メモリ領域の確保も解放も手動で行わなければなりません.
不要になった配列は

と記述して解放しましょう.配列変数の場合はdeleteの後ろに”[ ]”が必要です.
メモリの解放を忘れることをメモリリーク (memory leak)と呼びますが,思わぬところでプログラムが停止したりするので注意しましょう.

以下は,配列の動的確保の使用例です.

上記のプログラムでは,vectorClassのvecという配列変数をnewを使って動的に確保しています.
確保するサイズは,コンストラクタの引数で設定しています.
確保した後は,静的に確保した配列と同じように扱うことができます.
ただし,このプログラムが終了し,vectorClassが削除されるとき,デストラクタでメモリに確保した配列をdeleteを使って解放しています.
以下は実行結果の例です.

1番目の要素の値を入力してください.
3.2
2番目の要素の値を入力してください.
2.5
3番目の要素の値を入力してください.
1.3
ベクトルのノルムは4.2638