©️
C++ 動的メモリ(new, delete)
C言語とC++の動的メモリ確保・解放の違い
Cでmalloc, freeを使って行っていた動的メモリ確保・解放を、C++ではnew, deleteを使って行うことができる
new, deleteを使ったサンプルコード
#include <iostream>
int main() {
// 整数型のメモリをヒープに動的確保
int* pNumber = new int; // newを使って整数型のメモリを動的に確保
*pNumber = 42; // ポインタを使って値を代入
std::cout << "Number: " << *pNumber << std::endl; // 動的に確保した値の表示
// メモリを解放
delete pNumber; // deleteを使って確保したメモリを解放
// 配列のメモリを動的確保
int* pArray = new int[5]; // newを使って整数型配列のメモリを動的に確保
// 配列に値を代入
for (int i = 0; i < 5; ++i) {
pArray[i] = i * 10;
}
// 配列の内容を表示
std::cout << "Array contents: ";
for (int i = 0; i < 5; ++i) {
std::cout << pArray[i] << " ";
}
std::cout << std::endl;
// 配列のメモリを解放
delete[] pArray; // delete[]を使って配列メモリを解放
return 0;
}
多次元配列の動的メモリ確保・解放
int (*pArray1)[6] = new int[5][6];
delete[] pArray1;
// または
auto pArray2 = new int[5][6];
delete[] pArray2;
Discussion
これは変数の型と初期化子の型が合っていない故のエラーであって動的確保に失敗するというエラーではないです。
型を合わせれば問題ありません。
面倒くさければ
auto
(によって推論させる) でもよいでしょう。ありがとうございます!