Я пробовал свою руку на C, применяя игру Жизни Конвея.Как использовать двойной указатель для матрицы (двумерный массив)?
Я пытаюсь динамически строить две сетки (int
), один для текущего и один для следующего поколения, поэтому после того, как я определяю, как выглядит следующее поколение, я просто переключаю указатели.
Сначала я попытался безнадежно определить указатель на сетку, как int * grid
, который вы не можете индексировать со вторым набором скобок, например [][]
, потому что - очевидно - первый набор скобок возвращает int.
Я также пробовал что-то вроде int * grid[HEIGHT][WIDTH]
, но это создает проблемы с назначением одного указателя, подобного этому другому. (И на самом деле, я понятия не имею, что это на самом деле делает в памяти!)
В моей наивной надежде, я думал, что следующее может работать после спотыкания по двойным указателям. Программа компилируется, но не работает при запуске в указанной строке. (В Windows я не получаю больше подробностей, кроме того, что имя проблемного события: APPCRASH
).
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это не настоящая программа, а просто доказательство концепции проблемы.
#include <stdio.h>
#include <stdlib.h>
int HEIGHT = 20;
int WIDTH = 20;
int ** curr_gen; // Current generation
int ** next_gen; // Next generation
/* Entry Point main */
int main(int argc, char** argv) {
// Allocate memory for the grids
curr_gen = malloc(sizeof (int) * WIDTH * HEIGHT);
next_gen = malloc(sizeof (int) * WIDTH * HEIGHT);
curr_gen[0][0] = 0; //<< PROGRAM FAILS HERE
// Release heap resources
free(curr_gen);
free(next_gen);
return 0;
}
http://c-faq.com/ aryptr/dynmuldimary.html –
У вас не может быть ответа на одну ссылку.Чтобы обработать ваш случай, вам нужно понять, что происходит в памяти. – ThunderGr