У меня есть этот код:
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
Я, честно говоря, не понимаю, почему. Он работает с другим набором данных, но не с этим.
Вы, вероятно, просто получаете переполнение стека здесь. Попробуйте динамически выделить память, то есть использовать кучу.
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.
Если вам нужен массив динамического размера, вам нужно либо создать его, используя new
или используйте один из контейнеров STL.
Взгляните на некоторые ответы на Статический массив против динамического массива в C ++
Ваша проблема в том, что в C и C ++ массивы по определению определяются во время компиляции, поэтому то, что вы делаете, неверно, и очень странно, что этот код даже компилируется (компилятор должен кричать на вас)
Однако, если вам нужен определенный во время выполнения массив, вы должны либо использовать станд :: вектор или выделять память вручную (не рекомендуется, если у вас нет особых потребностей)
Постскриптум Вы должны проверить уровень предупреждения компилятора и многословность, потому что этот код имеет серьезные недостатки поэтому он даже не должен компилироваться (это также плохо для вас, если у вас очень низкий уровень предупреждения и т. д., потому что вы можете выбрать некоторые вредные привычки кодирования, потому что вы используете неосознанно специфичные для компилятора расширения языка, и это приведет вас в замешательство безумный при смене обстановки)