ybs7427   2년 전

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

char** ar;

int main()

{

int N;

int score[81] = { 0 };

scanf("%d", &N);

ar = (char**)malloc(sizeof(char*) * N);//이차원 배열 메모리할당

for (int i = 0;i < N;i++)

{

ar[i] = (char*)malloc(sizeof(char) * 80);//각 행 메모리할당

}

for (int i = 0;i < N;i++)

{

int chk = 0;

scanf("%s", ar[i]);//각각의 행에 문자열 입력받기

for (int j = 0;j <= strlen(ar[i]);j++)//각행의 길이만큼

{

if (ar[i][j] == 'O')

{

chk++;

score[i] += chk;

}

if (ar[i][j] == 'X')

{

chk = 0;

}

}

}

for (int i = 0;i < N;i++)

{

free(ar[i]);

printf("%d\n", score[i]);

}

free(ar);

return 0;

}

-----

이차원 배열로 풀어도 괜찮을 것 같아서 동적메모리할당을 이용하여 이차원배열로 문제를 접근해봤습니다.

백준 제출 결과,런타임에러가 계속 나옵니다. 메모리 해제를 하지 않아 오류가 나는 것 같아 마지막줄에 메모리해제까지 해봤는데 그대로 런타임에러가 뜹니다. 어떻게 해결할 수 있을까요. 감사합니다.

zenith82114   2년 전

프로그램이 끝나면 동적 할당한 메모리는 free하지 않아도 저절로 해제되기는 합니다.
동적 할당은 문제가 아니고 잘못된 인덱스 접근을 하는 곳이 있습니다.

ybs7427   2년 전

<=strlen(ar[i])에서 실수한 것 같습니다. <strlen(ar[i])로 바꾸어서 제출했는데도 역시 런타임에러(insufficient space)가 뜹니다. 

ybs7427   2년 전

해결했습니다. score배열도 동적할당으로 받았어야했는데 사이즈를 고정시켜놨네요. 감사합니다.

댓글을 작성하려면 로그인해야 합니다.