Я начинаю с C, и я немного запутался в указателях и о том, как они передаются другим функциям. Я работаю над проектом и в своей основной функции, я malloc 2D-массив символов, представляющих игровое поле.Пытается получить доступ к адресу 2D-массива в C и получить ошибку сегментации
// In main, allocate 2D array
char **board = malloc(rows * sizeof(char*));
for (int i = 0; i < rows; i++) {
board[i] = malloc(cols * sizeof(char));
}
Функция может быть вызван позже, которая будет загружать сохраненную версию игры, и, таким образом, повторно таНос моих переменных плат.
void stringToGame(char ***board, int *rows, int *cols, int *turn, int *winLength) {
// Set new values for rows and cols based on file
...
// Malloc board
*board = malloc(*rows * sizeof(char*));
for (int i = 0; i < *rows; i++) {
*board[i] = malloc(*cols * sizeof(char));
}
}
Когда я вызываю метод stringToGame в своей основной функции, я передаю адрес платы.
stringToGame(&board, &rows, &cols, &turn, &winLength);
Передача адреса платы вызывает ошибку сегментации, и я понятия не имею, почему.
В качестве второстепенного вопроса мне нужно освободить() мой старый 2D-массив для доски, прежде чем я буду malloc новым?
Это упростит управление вашим кодом, если у вас есть выделенная функция для распределения/перераспределения платы. –
@ M.M Это план, как только я смогу заставить его работать вообще! –