3

私はこのコードを持っています:

size_t count = new_data.size();
std::cout << "got the count: " << count << std::endl;
double g_x[count];
std::cout << "First array done\n";
double g_y[count];
std::cout << "Allocated array of size" << count << std::endl;

出力が得られます:

got the count: 1506538
Segmentation fault: 11

理由は正直わかりません。別のデータセットでは機能しますが、このデータセットでは機能しません。

4

3 に答える 3

3

ここでスタックオーバーフローが発生している可能性があります。メモリを動的に割り当てるようにしてください。つまり、ヒープを使用してください。

double* g_x = new double[count];
...
delete[] g_x;

さらに良い解決策は、以下を使用することstd::vector<>です。

#include <vector>

...

std::vector<double> g_x(count); // Creates vector with the specified size.
于 2013-02-23T18:28:05.890 に答える
1

動的なサイズの配列が必要な場合は、を使用して配列を作成するかnew、STLコンテナの1つを使用する必要があります。

C++の静的配列と動的配列の答えをいくつか見てみましょう。

于 2013-02-23T18:28:33.460 に答える
1

あなたの問題は、C および C++ の配列は定義上コンパイル時に定義されるため、あなたが行うことは間違っており、このコードがコンパイルされることさえ非常に奇妙です (コンパイラーはあなたに悲鳴を上げるはずです)。

ただし、ランタイムで定義された配列が必要な場合は、std::vectorを使用するか、手動でメモリを割り当てる必要があります (あまり具体的なニーズがない場合はお勧めしません)。

PS コンパイラの警告レベルと冗長性を確認する必要があります。このコードには重大な欠陥があるため、コンパイルすることさえできないからです (警告レベルが非常に低い場合などは、悪いコーディングの習慣を拾う可能性があるため、あなたにとっても悪いことです。知らずにコンパイラ固有の拡張機能を言語に使用しており、環境を変更すると気が狂ってしまうでしょう)

于 2013-02-23T18:41:24.183 に答える