Ошибка сегментации кода C ++ только в vscode - PullRequest
0 голосов
/ 21 февраля 2020

Мой код C ++ (показан ниже) работает на этом сайте: GDB Online , но не в Visual Studio, где происходит сбой при

iterations[imag_times][real_times] = i % (iter / 2);

при imag_times равно 1, а real_times равно 0, за исключением Exception has occurred. Segmentation fault

Я установил GDB версии 7.6.1.

Мой вопрос: Кто-нибудь знает, как это исправить и почему это происходит?

#include <iostream>
using namespace std;

int main() 
{
    // initialization
    const double real_min = -1;
    const double real_max = 1;
    const double imag_min = -1;
    const double imag_max = 1;

    const int iter = 30;
    const double real_offs = 0.01;
    const double imag_offs = 0.01;

    double z_real = 0;
    double z_imag = 0;
    double c_real = real_min;
    double c_imag = imag_max;

    int real_times = 0;
    int imag_times = 0;
    int** iterations = new int*[1];
    iterations[0] = new int;
    int i = 0;

    // start
    while(c_imag >= imag_min)
    {
        iterations = (int**)realloc(iterations, sizeof(int*) * (imag_times + 1));

        real_times = 0;
        c_real = real_min;

        while(c_real <= real_max)
        {
            iterations[imag_times] = (int*)realloc(iterations[imag_times], sizeof(int) * (real_times + 1));

            z_real = 0;
            z_imag = 0;
            for(i = 0; i < iter; i++)
            {
                double z_imag2 = z_imag * z_imag;
                z_imag = 2 * z_real * z_imag + c_imag;
                z_real = z_real * z_real - z_imag2 + c_real;

                if(z_real * z_real + z_imag * z_imag > 4)
                {
                    break;
                }
            }

            iterations[imag_times][real_times] = i % (iter / 2);

            real_times++;
            c_real = real_min + real_offs *  real_times;
        }

        imag_times++;
        c_imag = imag_max - imag_offs * imag_times;
    }

    // output
    for(int i = 0; i < imag_times; i++)
    {
        for(int j = 0; j < real_times; j++)
        {
            cout << iterations[i][j];
            cout << ",";
        }
        cout << "\n";
    }

    cout << "done";
    std::cin.get(); // pause so the program doesnt exit instantly
    return 0;
}

Заранее спасибо!

...