2011-02-06 18 views
-1

私はこの構造体を宣言:力学構造

struct matrix27 { 
    double mat27[1083][1083]; 
} a1; 

私のプログラムは、この構造で実行されます。
しかし、私は、この構造体を宣言する場合:

struct matrix27 { 
    double mat27[5034][5034]; 
} a1; 

私のプログラムが実行されません(それはコンパイルが、私はそれを実行すると、Windowsはそれを止める「はfilename.exeは動作を停止しました」。)。

私は、私はそれを動的に宣言したい、いくつかの機能にA1を使用 はどのように私はそれを行うことができますか?

+6

「実行できません」とはどういう意味ですか?それはコンパイルされませんか?実行時にクラッシュしますか?どのようなエラーメッセージが表示されますか? –

+0

それはコンパイルされますが、私がそれを実行するとウィンドウが停止します。 "filename.exeが動作を停止しました"。 – Jafar

+0

[私はあなたの問題を再現できません。](http://codepad.org/3CxgF8mE)あなたが理解していないエラーを示している完全な、コンパイル可能なテストケースを提供できますか? –

答えて

4

私は5034^2*sizeof(double)は、お使いのプラットフォームのスタック領域に収まるようにメモリのあまりに大きな塊であると仮定します。 (これは私のプラットフォーム上では200MB近くあり、スタックスペースのクラッシュをあまりにも多く割り当てようとしているプログラムです。)ヒープ上にメモリを置くことで回避できます。

そして、あなたはC++ array FAQを読んで確認してください。

+0

a1がクラスの型と共に定義されているとすれば、少なくとも、与えられた不完全なコードが本当に何が起こっているのかを表しているかどうかは疑問です。 –

3

sbiが正しい。この構造体をスタックに配置したい場合は、スタックサイズを大きくする必要があります。 Visual Studioを使用している場合は、(プロジェクト)のプロパティ - >構成プロパティ - >リンカ - >システム - >スタック予約サイズを選択することができます。

関連する問題