ошибка при формирование большеразмерного массива в С++

233
16 марта 2018, 14:18

Объявление массивов:

float x[sum], y[sum],xp[sum],yp[sum];

где sum был вычислен заранее и получился равным где то 13000

Cпособ задания массивов.

for (j=1;j<n1;j++){
for (k=0;k<round(2*pi*j);k++){
        x[t]=j*h*cos(2*pi*k/(round(2*pi*j)));
        y[t]=j*h*sin(2*pi*k/(round(2*pi*j)));
        t++;
    };

t примерно равно 13000. По вышеуказанной схеме формируются 2 массива координат точек в одном слое double xp[j] и yp[j] длиной примерно g=13000 точек, необходимо создать одномерный массив (застакать n0+50=165 раз(количество слоев) массив координат), массив dz[g*(n0+50)] содержит координату слоя для точки у которой координата x берется из массива dx3, а у соотвественно из dy3:

for (int i=0;i<n0+50;i++){
 for (int j=0;j<g;j++){
    dx3[j+i*g]=xp[j];
    dy3[j+i*g]=yp[j];
    dz3[j+i*g]=h*i-Q;}}

либо можно создать двумерный массив, но это нежелательно:

for (int i=0;i<n0+50;i++){
    for (int j=0;j<g;j++){
         dxx[i][j]=xp[j];
        dyy[i][j]=yp[j];
    }
}

Из-за обоих циклов при запуске вылетает программа и просит JIT-отладку. Подскажите, пожалуйста, как решить данную проблему или же покажите пример более оптимального кода.

Answer 1

Тут создаются слишком большие массивы:

 for (int i=0;i<n0+50;i++){
 for (int j=0;j<g;j++){
    dx3[j+i*g]=xp[j];
    dy3[j+i*g]=yp[j];
    dz3[j+i*g]=h*i-Q;}}

вместо массива используйте std::vector или создавайте массим в динамической памяти через new

Если вы добавить try catch блоки то наверняка увидете cannot allocate memory

READ ALSO
Как прочитать и вывести каждую строку из файла? C++

Как прочитать и вывести каждую строку из файла? C++

Как прочитать и вывести каждую строку из файла? Имеется такой код:

204
C++, консольное приложение, защита от неправильного ввода

C++, консольное приложение, защита от неправильного ввода

В этом приложении входным данным должно быть натуральное число, при вводе целого или нуля и нажатия Enter программа начинается сначала и так...

225
Как получить хэндел драйвера в системе и записать в его память

Как получить хэндел драйвера в системе и записать в его память

Я хочу получить информацию о модуле в системеДопустим, есть драйвер в системе Example

162
QT как отловить закрытие создоваемого QFileDialog

QT как отловить закрытие создоваемого QFileDialog

Создаю такое диалоговое окно

201