Почему в моем коде возникает ошибка сегментации? - PullRequest
0 голосов
/ 05 апреля 2019

Когда я компилирую свой код с помощью GCC, а затем запускаю его, когда я вызываю свою функцию в своем коде, она печатает: «Ошибка сегментации (ядро сброшено)».

Я попытался выполнить поиск в Google дляРешения.

Вот мой текущий код:

char ** saveLevelPositions() {
  int x, y;
  char ** positions;
  positions = malloc(sizeof(char *) * 25);

  for (y = 0; y < 25; y++) {
    positions[y] = malloc(sizeof(char) * 100);

    for (x = 0; x < 100; x++) {
      positions[x][y] = mvinch(y, x);
    }
  }

  return positions;
}

Я ожидал, что функция будет работать правильно, и она просто выдаст ошибку сегментации.

РЕДАКТИРОВАТЬ: Для немногонемного контекста, вот ссылка на проект GitHub: https://github.com/xslendix/rogue

1 Ответ

5 голосов
/ 05 апреля 2019

Как указано в других ответах и ​​комментариях, вы должны поменять местами использование x и y, поэтому
positions[x][y] должно быть positions[y][x].

Кроме того, вы не используете правильный тип для хранения результата mvinch. В curses.h говорится:

typedef unsigned long chtype;

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

chtype ** positions;
positions = malloc(sizeof(chtype *) * 25);
positions[y] = malloc(sizeof(chtype) * 100);

И включите предупреждения вашего компилятора, потому что компилятор должен был пометить эту ошибку.

...