C++ メモリの動的確保(new)
数値計算時に巨大な配列を組む必要がある。通常の変数や配列宣言でメモリを確保するスタック領域では、巨大配列を記憶するメモリが足らない場合がよくある。そんなときに利用するのが、スタック領域に比べて巨大なヒープ領域での動的なメモリ確保。
C++ソース
/* NEW演算子の使い方 */
#include <iostream>
using namespace std;
int main()
{
//変数---------------------------------------------------------------
cout << "変数" <<endl;
int *p1;
p1 = new int(); // int型の領域を動的確保
*p1 = 123;
cout << *p1 << endl;
delete p1; // 動的に確保した領域を解放
//1次元配列----------------------------------------------------------
cout << "1次元配列(2-1)" <<endl;
int *p2;
p2 = new int[10]; // int型10個分の領域を動的確保
for(int i=0; i<10; ++i)
{
p2[i] = i;
cout << p2[i] << " ";
}
cout <<endl;
delete [] p2; // 動的に確保した領域を解放
//2次元配列(1)--------------------------------------------------------
cout << "2次元配列(1)" <<endl;
int (*p3)[10] = new int[5][10]; // int型5×10個分の領域を動的確保
for(int i=0; i<5; ++i){
for(int j=0; j<10; ++j){
p3[i][j] = (i+1)*(j+1);
cout << p3[i][j] << " ";
}
cout <<endl;
}
delete [] p3; // 動的に確保した領域を解放
//2次元配列(2)--------------------------------------------------------------
cout << "2次元配列(2)" <<endl;
int **p4= new int*[5]; // int型5個分の領域を動的確保
for (int i= 0; i<5; ++i) p4[i]= new int[10]; // int型10個分の領域をそれぞれ動的確保
for(int i=0; i<5; ++i){
for(int j=0; j<10; ++j){
p4[i][j] = (i+1)*(j+1);
cout << p4[i][j] << " ";
}
cout <<endl;
}
for (int i= 0; i<5; ++i) delete[] p4[i]; // 動的に確保した領域をそれぞれ解放
delete[] p4;
//3次元配列(1)--------------------------------------------------------
cout << "3次元配列(1)" <<endl;
int ***p5 ; //
p5 = new int**[5];
for (int i= 0; i<5 ; ++i){
p5[i] = new int*[2];
for (int j= 0; j<2 ; ++j){
p5[i][j] = new int[10];
}
}
for(int i=0; i<5; ++i){
for(int j=0; j<2; ++j){
for(int k=0; k<10; ++k){
p5[i][j][k] = (i+1)*(j+1)*(k+1);
cout << p5[i][j][k] << " ";
}
cout <<endl;
}
}
for(int i=0; i<5; ++i){
for(int j=0; j<2; ++j){
delete[] p5[i][j];
}
delete[] p5[i];
}
delete[] p5; // 動的に確保した領域を解放
return 0;
}
実行結果



