Обновление массива в функции приводит к потере указателя - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь разделить мой код на функции, у меня есть пример кода "Game Of Life". Однако, когда я пытаюсь инициализировать двумерный массив сетки в функции, gnuplot не выдает ошибку допустимых точек данных.

Это глобальные переменные, объявленные до main:

static char **currWorld=NULL, **nextWorld=NULL

Это исходный лог c для инициализации игровой сетки, но эта часть в основном.

if (game == 0){ // Use Random input
    for(i=1;i<nx-1;i++){
        for(j=1;j<ny-1;j++) {
            currWorld[i][j] = (real_rand() < prob);
            population[w_plot] += currWorld[i][j];
        }
    }
}
else if (game == 1){ //  Block, still life
    printf("2x2 Block, still life\n");
    int nx2 = nx/2;
    int ny2 = ny/2;
    currWorld[nx2+1][ny2+1] = currWorld[nx2][ny2+1] = currWorld[nx2+1][ny2] = currWorld[nx2][ny2] = 1;
    population[w_plot] = 4;
}
else if (game == 2){ //  Glider (spaceship)
    printf("Glider (spaceship)\n");
    // Your code codes here
}
else {
    printf("Unknown game %d\n",game);
    exit(-1);
}

Это моя функция:

  int init_game(int choice, int probability){

    int i,j;
    if (choice == 0){ // Use Random input
        for(i=1;i<nx-1;i++){
            for(j=1;j<ny-1;j++) {
                currWorld[i][j] = (real_rand() < probability);
                population[w_plot] += currWorld[i][j];
            }
        }
    }
    else if (choice == 1){ //  Block, still life
        printf("2x2 Block, still life\n");
        int nx2 = nx/2;
        int ny2 = ny/2;
        currWorld[nx2+1][ny2+1] = currWorld[nx2][ny2+1] = currWorld[nx2+1][ny2] = currWorld[nx2][ny2] = 1;
        population[w_plot] = 4;
    }
    else if (choice == 2){ //  Glider (spaceship)
        printf("Glider (spaceship)\n");
        // Your code codes here
    }
    else {
        printf("Unknown game %d\n",choice);
        exit(-1);
    } 
}

и мой вызов функции в основном:

init_game(game, prob);

значение игры равно 0, вероятность равна 0,2, и я проверил распределение памяти и другие вещи, они отлично работают. Разница лишь в том, что я переместил логи c в функцию. Как это может случиться? Мои массивы глобальные, я не могу понять, как его нельзя инициализировать.

Это ошибка gnuplot:

Skipping data file with no valid points

Поскольку gnuplot и другие функции работают нормально, я не добавил их, но если вам нужна информация, я могу добавить.

Вот ссылка на сам файл:

file

...