サイズ 150000 の double の配列を宣言する必要があるコードを開発しています。1 つの配列が宣言されると、コードが正常に実行されます。2 つの配列を宣言すると、実行中に例外がスローされて終了します。
Code is :
double a[150000];
double b[150000];
a のみを宣言すると、完全に実行されます。a と b の両方を宣言すると、終了します。誰でもこれを解決する方法を提案できますか?
サイズ 150000 の double の配列を宣言する必要があるコードを開発しています。1 つの配列が宣言されると、コードが正常に実行されます。2 つの配列を宣言すると、実行中に例外がスローされて終了します。
Code is :
double a[150000];
double b[150000];
a のみを宣言すると、完全に実行されます。a と b の両方を宣言すると、終了します。誰でもこれを解決する方法を提案できますか?
2 つの配列がスタックをオーバーフローしています(それらがローカル変数であると仮定します)。代わりに、 を使用しstd::vector
てメモリを管理し、配列にメモリを動的に割り当てます。
std::vector<double> a(150000);
std::vector<double> b(150000);
std::vector
インスタンスがスタック上にある場合でも、std::vector
はヒープ上にあるデータに内部でメモリを動的に割り当て、スタック オーバーフローを回避します。
わかった!アプリにスタック オーバーフローがあります。
修正例:
スタックを使用しないでください -動的メモリ割り当て (ヒープ)を使用します:
double* a = new double[150000];
vectorなどの STL コンテナーを使用します。内部的には、ヒープに物を割り当てます。
std::vector<double> a(150000);
スタックサイズを増やします(悪い考えですが、本当に必要な場合は、コンパイラのドキュメントを読んで、ここを見てください)