2016-08-07 19 views
0

を、私は、それぞれが次のように定義された領域私のプログラムでは30の動的に割り当てられた配列の周りに持っている:プログラムがクラッシュし、あまりにも多くの動的に割り当てられた配列をに値を割り当てるとき - C++

int Nx = 240; 
int Ny = 240; 
double* array = new double(Nx*Ny); 

私はそれらの16に値を割り当てることができ、しかし、一度私は17日に到達すると、それはseg障害をスロー!

これはそれをスローするコードですが、これはまったく問題ありません。

for (int i = 0; i < Nx*Ny; i++) { 
    array[i] = 0; 
} 

私は本当に私は4GBのRAMを持っているので、私は不可能である必要があり、そのヒープが不足すると思ったが、その理由はわかりません! 私はMSVS15を使用しており、Windows 10上でプログラムを実行しています!

これはどうして起こりますか? 正確なエラー:

Exception thrown at 0x00298389 in ecostress.exe: 0xC0000005: Access violation writing location 0x01D2B000. If there is a handler for this exception, the program may be safely continued.

+2

p.s.あなたのアプリケーションに適している場合は、 'std :: vector'を使うことを検討してください。 – Hurkyl

+0

'memset'を使ってメモリをゼロにすることもできますが、これはおそらく高速です。 – Inline

答えて

6

シンプルタイプミス:

double* array = new double(Nx*Ny); // creates a single, initialized double 
double* array = new double[Nx*Ny]; // creates an array of doubles 
+0

私のgooodness!もしあなたが私がこれに費やした日数を知っていれば。どうもありがとうございます! –

+0

@sorry_I_wont take it easy :) – artm

3

@Hurkylが正しく答えました。

私はC++上にある場合、それはベクトルを使用することをお勧めしますことを追加したい:これを実行する理由は通常ありませんが、直接あなたは、&array[0]を使用することができますポインタにアクセスするには

vector<int> array(Nx*Ny); 

、およびあなたはまだarray[0] = 0を行うことができます。

通常、vectorとstlの利点は、デストラクタのおかげでメモリが自動的に解放されることです。

関連する問題