0

サイズ 150000 の double の配列を宣言する必要があるコードを開発しています。1 つの配列が宣言されると、コードが正常に実行されます。2 つの配列を宣言すると、実行中に例外がスローされて終了します。

Code is :

double a[150000];
double b[150000];

a のみを宣言すると、完全に実行されます。a と b の両方を宣言すると、終了します。誰でもこれを解決する方法を提案できますか?

4

3 に答える 3

6

2 つの配列がスタックをオーバーフローしています(それらがローカル変数であると仮定します)。代わりに、 を使用しstd::vectorてメモリを管理し、配列にメモリを動的に割り当てます。

std::vector<double> a(150000);
std::vector<double> b(150000);

std::vectorインスタンスがスタック上にある場合でも、std::vectorはヒープ上にあるデータに内部でメモリを動的に割り当て、スタック オーバーフローを回避します。

于 2013-04-25T11:20:04.127 に答える
4

わかった!アプリにスタック オーバーフローがあります。 ここに画像の説明を入力

修正例:

  • スタックを使用しないでください -動的メモリ割り当て (ヒープ)を使用します:

    double* a = new double[150000];

  • vectorなどの STL コンテナーを使用します。内部的には、ヒープに物を割り当てます。

    std::vector<double> a(150000);

  • スタックサイズを増やします(悪い考えですが、本当に必要な場合は、コンパイラのドキュメントを読んで、ここを見てください)

  • 何らかの方法でコードを再設計する
于 2013-04-25T11:40:17.387 に答える