工事中

C,C++分科会テキスト05

目的

巨大な配列を使いたいとします。ではやってみましょう。すなおにこんなプログラムを書いてみます。

int main(){
  int a[256][256][256];
  return 0;
}
			
さてどうなりますでしょうか?

WINDOWS2000では
ぎゃー
ということになります。こまります。

プログラムの中で使える変数には数の制約があります。
それゆえ、このような場合はメモリーを確保するという操作を明示的に行う必要があります。

目次

new
メモリーの確保の仕方
delete
メモリーの開放の仕方

new

256*256*256個のintが入るだけのメモリーを確保するには

new int[256*256*256];

とやります。 この確保したメモリーを使うにはポインタを利用します。

int *a;
a=new int[256*256*256];
			

とやります。すなわちnewはこの確保したメモリーの先頭のアドレスを返しているのです。 さてこうすれば、*(a+30)というように使うことができます。ポインタですから、

a[50*256*256+50*256+50];
			
ともやれて、こちらのほうが配列のように使えるので便利です。
多次元の配列は
int*** a=new int**[256];
for(int i=0;i<256;i++){
  a[i]=new int* [256];
  for(int j=0;j<256;j++){
    a[i][j]=new int[256];
  }
}
			
とやればOk.です。a[0][0][0]からa[255][255][255]までつかえます。

メモリーの解放の仕方

使い終わったらメモリーを手放すことができます。

delete a;