массивы — выделение сегмента C ++

У меня есть этот код:

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

Я, честно говоря, не понимаю, почему. Он работает с другим набором данных, но не с этим.

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.
3

Другие решения

Если вам нужен массив динамического размера, вам нужно либо создать его, используя newили используйте один из контейнеров STL.

Взгляните на некоторые ответы на Статический массив против динамического массива в C ++

1

Ваша проблема в том, что в C и C ++ массивы по определению определяются во время компиляции, поэтому то, что вы делаете, неверно, и очень странно, что этот код даже компилируется (компилятор должен кричать на вас)

Однако, если вам нужен определенный во время выполнения массив, вы должны либо использовать станд :: вектор или выделять память вручную (не рекомендуется, если у вас нет особых потребностей)

Постскриптум Вы должны проверить уровень предупреждения компилятора и многословность, потому что этот код имеет серьезные недостатки поэтому он даже не должен компилироваться (это также плохо для вас, если у вас очень низкий уровень предупреждения и т. д., потому что вы можете выбрать некоторые вредные привычки кодирования, потому что вы используете неосознанно специфичные для компилятора расширения языка, и это приведет вас в замешательство безумный при смене обстановки)

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector