38.8번 지뢰찾기 관련 질문입니다.
, 김 원재님이 작성테스트시 다른 문제는 없어 보이는데 왜 실패하는지 궁금 합니다
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n;
int m;
scanf("%d %d", &m , &n);
char** matrix = malloc(sizeof(char *) * (m));
char** mineMap = malloc(sizeof(char *) * (m));
for(int idx = 0 ; idx < m ; idx++)
{
matrix[idx] = malloc(sizeof(char) * (n+1));
mineMap[idx] = malloc(sizeof(char) * (n+1));
memset(matrix[idx],'0',sizeof(char)*(n+1));
memset(mineMap[idx],'0',sizeof(char)*(n+1));
}
for(int i = 0 ; i < m ; i++)
{
scanf("%s",matrix[i]);
}
for(int i = 0 ; i < m ; i++)
{
for(int j = 0 ; j < n ; j++)
{
if(matrix[i][j] == '*')
{
for(int a = i-1 ; a <= i+1 ; a++)
{
for(int b = j-1 ; b <= j+1; b++)
{
if(mineMap[a] != '\0' && mineMap[a][b] != '\0')
{
if(matrix[a][b] == '*')
{
mineMap[a][b]='*';
continue;
}
else if((a!=i || b!=j))
{
mineMap[a][b]++;
}
}
}
}
}
}
}
for(int i =0 ; i < m ; i ++)
{
for(int j = 0 ; j < n ; j++)
{
printf("%c",mineMap[i][j]);
}
printf("\n");
free(mineMap[i]);
free(matrix[i]);
}
free(matrix);
free(mineMap);
return 0;
}
Re: 38.8번 지뢰찾기 관련 질문입니다.
, 도장_ 관리자님이 작성실행해보면 메모리 관련 오류가 발생합니다.
온라인 심사에서도 프로그램 오류로 중단됩니다.
입력
3 3
...
...
..*
에 대해서 실행한 결과입니다.
하단 조사식 창에 값에 대한 메시지가 출력되어 있습니다.
mineMap에 잘못된 문자가 있으며, []로 접근한 곳은 메모리를 읽을 수 없습니다.
메모리 할당, 초기화하는 부분, 값을 읽어들이는 부분, 배열 인덱스가 범위를 초과하지 않았나 등을 검토해야 합니다.
UNIT 6을 참조해서 디버거 사용법을 배우면 디버깅이 쉬워입니다.