#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
int num1, num2;
scanf("%d %d", &num1, &num2);
char** matrix = malloc(sizeof(char*) * num1);
for (int i = 0; i < num1; i++)
{
matrix[i] = malloc (sizeof(char) * (num2 + 1));
}
for (int i = 0; i < num1; i++)
{
scanf ("%s", matrix[i]);
}
for (int i = 0; i < num1; i++)
{
for (int j = 0; j < num2; j++)
{
if (matrix[i][j] == '.')
{
matrix[i][j] = '0';
}
}
}
for (int i = 0; i < num1; i++)
{
for (int j = 0; j < num2; j++)
{
if (matrix[i][j] == '*')
{
for (int y = i - 1; y <= i + 1; y++)
{
for (int x = j - 1; x < j + 1; j++)
{
if ( x < 0 || y < 0 || y >= num1 || x >= num2 || matrix[i][j] == matrix[y][x] || matrix[i][j] == '*')
continue;
matrix[y][x] += 1;
}
}
}
}
}
for (int i = 0; i < num1; i++)
{
for (int j = 0; j < num2; j++)
{
printf("%s", matrix[i][j]);
}
printf("\n");
}
for (int i = 0; i < num1; i++)
{
for (int j = 0; j < num2; j++)
{
free(matrix[i]);
}
}
return 0;
}
실행도 안되고 여기서 matrix가 버퍼 오퍼런과 잘못된 데이터를 읽고 있다고 경고가 발생하는데 이유 뭔지 궁금합니다.
포럼 상단 오른쪽에 38.8로 검색하면 이전 질문과 답변을 볼 수 있습니다.
또한, UNIT 6 디버거 사용법을 학습하고, 단계별로 실행하면서 변수 값을 확인해보기 바랍니다.
코드에 대한 디버깅은 스스로 해야 합니다. 어려우면 해당 단원을 건너 뛰면 됩니다. 나중에 다시 도전하세요.
가장 먼저 해야 하는 것은
3 3
...
...
..*
같은 입력을 읽어들이는 코드,
메모리를 동적으로 할당해서 읽은 값을 저장하는 코드,
검증하기 위해 읽은 값을 그대로 출력하는 코드,
메모리를 안전하게 해제하는 코드
이 단계를 완성한 다음에 실제 로직을 작성하면 됩니다.
코드의 뼈대를 완성하고 살을 채우세요.
현재 이 코드는 메인 로직의 문제가 아니라 기본 뼈대가 안 되는 겁니다.