●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

C++の動的メモリ確保(Dynamic Memory Allocation)とは?newとdeleteを使いこなそう

C++では、実行時に必要なメモリを自分で確保・解放することができます。 これを動的メモリ確保(Dynamic Memory Allocation)と呼びます。

この記事では、動的メモリ確保の基本的な使い方から、配列の確保、new/deleteの使い方、注意点まで初心者向けにわかりやすく解説します。

動的メモリ確保とは?

動的メモリ確保とは、プログラムの実行中に必要なサイズだけメモリを確保することです。 静的な配列ではサイズをあらかじめ決める必要がありますが、動的確保なら柔軟に対応できます。

new演算子でメモリ確保

C++では new を使ってヒープ領域にメモリを確保し、そのアドレスをポインタで受け取ります。

int* p = new int;   // 整数1つ分のメモリを確保
*p = 100;

cout << *p << endl; // → 100

この場合、pは確保されたメモリのアドレスを指します。

delete演算子でメモリ解放

確保したメモリは使い終わったら delete を使って手動で解放する必要があります。

delete p;  // メモリを解放

解放しないとメモリリーク(無駄にメモリを消費し続ける状態)になります。

動的配列の確保

複数の要素を扱うには、newと配列を組み合わせて使います。

int* arr = new int[5];  // int型の配列を5個分確保

for (int i = 0; i < 5; i++) {
    arr[i] = i * 10;
}

for (int i = 0; i < 5; i++) {
    cout << arr[i] << " ";
}

delete[] arr;  // 配列の場合は delete[] を使う

動的メモリのメリット

  1. 必要な分だけ確保できる
    メモリの無駄遣いを減らせる。
  2. 実行時にサイズを決められる
    ユーザー入力などに対応可能。
  3. 構造体やオブジェクトにも利用可能
    柔軟な設計が可能になる。

注意点

  • 必ず delete を忘れずに!(メモリリーク防止)
  • delete[]delete の使い分けに注意
  • 解放後のポインタを使うと未定義動作になる(ダングリングポインタ)
  • nullptr への安全対策も忘れずに

スマートポインタとの関係(参考)

C++11以降では、手動の new/delete の代わりに スマートポインタ(unique_ptrshared_ptr を使うことが推奨されています。 これにより、自動でメモリ管理ができ、安全性が大幅に向上します。

まとめ

C++の動的メモリ確保は、必要なメモリを自由に操作するための基本技術です。 newdeleteを正しく使いこなせば、柔軟で効率的なプログラムが書けるようになります。

まずは基本の動的変数・動的配列から使ってみて、慣れてきたら構造体やクラスにも応用してみましょう!