'new' による動的メモリ確保
CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 6/56。
これまで、プログラム内ですでに作成されている変数を指すポインタを扱ってきました。しかし、プログラムの実行中に変数を作成する必要がある場合はどうすればよいでしょうか?ここで、newキーワードを使用した動的メモリ割り当てが不可欠になります。
newキーワードを使用すると、プログラムの実行中にヒープ上に変数のメモリを割り当てることができます。スタック上に作成される通常の変数とは異なり、動的に割り当てられたメモリは、明示的に解放するまで保持されます。
int* ptr = new int; // 整数用のメモリを割り当てます
*ptr = 42; // 割り当てられたメモリに値を代入しますこの例では、new int は整数を格納するのに十分なメモリを割り当て、そのメモリ位置へのポインタを返します。その後、デリファレンス演算子を使用して、他のポインタと同じように、値を代入したり動的に割り当てられた変数にアクセスしたりできます。
動的メモリ割り当ては、実行時までどれくらいのメモリが必要か分からない場合や、変数をそれが作成されたスコープを超えて存在させる必要がある場合に特に便利です。この柔軟性により、new はより複雑なプログラムを構築するための強力なツールになります。
チャレンジ
簡単プログラムの実行中に new キーワードを使用して変数のメモリを割り当てる、動的メモリ割り当てを実演するプログラムを作成してください。
以下の入力が提供されます:
- 動的に割り当てられたメモリに格納する整数値
プログラムは以下の手順を行う必要があります:
newキーワードを使用して、整数のためのメモリを動的に割り当てるnewによって返されたポインタを、numPtrという名前のポインタ変数に格納する- 間接参照演算子を使用して、入力値を動的に割り当てられたメモリに代入する
- ポインタを間接参照して、動的に割り当てられたメモリに格納されている値を出力する
- ポインタに格納されているメモリ番地を出力する
以下の正確な出力形式を使用してください:
Value: [value]
Address: [memory address]メモリ番地は、C++が動的に割り当てられたメモリに対して表示する形式である、16進数形式で表示されます。
チートシート
new キーワードは、プログラムの実行中にヒープ上に変数のためのメモリを割り当てます:
int* ptr = new int; // 整数用のメモリを割り当てます
*ptr = 42; // 割り当てられたメモリに値を代入しますスタック上に作成される通常の変数とは異なり、動的に割り当てられたメモリは、明示的に解放されるまで保持され、作成されたスコープを超えて存在し続けることができます。
自分で試してみよう
#include <iostream>
using namespace std;
int main() {
// 入力を読み込む
int value;
cin >> value;
// TODO: 以下にコードを記述してください
// 'new' を使用して整数のメモリを動的に割り当てます
// ポインタを 'numPtr' という名前の変数に格納します
// 入力値を動的に割り当てられたメモリに代入します
// 結果を出力
cout << "Value: " << /* ここで numPtr をデリファレンスします */ << endl;
cout << "Address: " << /* numPtr に格納されているアドレスを出力します */ << endl;
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。