저는 초보자로서 포인터에 대해 조금 혼란스러워하며 다른 함수로 전달되는 방법에 대해 약간 혼란스러워합니다. 나는 프로젝트에서 일하고 있는데, 나의 주요 기능에서는 게임 보드를 나타내는 숯의 2D 배열을 malloc했다.C에서 2 차원 배열의 주소에 액세스하려고하고 세분화 오류가 발생합니다.
// In main, allocate 2D array
char **board = malloc(rows * sizeof(char*));
for (int i = 0; i < rows; i++) {
board[i] = malloc(cols * sizeof(char));
}
나중에 함수를 호출하여 저장된 버전의 게임을로드하므로 내 보드 변수를 다시 malloc 할 수 있습니다.
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);
보드의 주소가 세그먼트 오류를 일으키는 나는 아무 생각이 왜 전달.
두 번째 질문으로, 새로운 하나의 malloc을 만들기 전에 보드의 기존 2D 배열을 해제해야합니까?
보드를 할당/재 할당하기위한 전용 기능이 있다면 코드 관리가 쉬워집니다. –
@ M.M 그게 일할 수있게되면 곧 그 계획이야! –