8958번 - OX퀴즈
#define _CRT_SECURE_NO_WARNINGS
#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);//각 행 메모리할당
}
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;
free(ar[i]);
printf("%d\n", score[i]);
free(ar);
return 0;
-----
이차원 배열로 풀어도 괜찮을 것 같아서 동적메모리할당을 이용하여 이차원배열로 문제를 접근해봤습니다.
백준 제출 결과,런타임에러가 계속 나옵니다. 메모리 해제를 하지 않아 오류가 나는 것 같아 마지막줄에 메모리해제까지 해봤는데 그대로 런타임에러가 뜹니다. 어떻게 해결할 수 있을까요. 감사합니다.
프로그램이 끝나면 동적 할당한 메모리는 free하지 않아도 저절로 해제되기는 합니다.동적 할당은 문제가 아니고 잘못된 인덱스 접근을 하는 곳이 있습니다.
<=strlen(ar[i])에서 실수한 것 같습니다. <strlen(ar[i])로 바꾸어서 제출했는데도 역시 런타임에러(insufficient space)가 뜹니다.
해결했습니다. score배열도 동적할당으로 받았어야했는데 사이즈를 고정시켜놨네요. 감사합니다.
댓글을 작성하려면 로그인해야 합니다.
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;
}
-----
이차원 배열로 풀어도 괜찮을 것 같아서 동적메모리할당을 이용하여 이차원배열로 문제를 접근해봤습니다.
백준 제출 결과,런타임에러가 계속 나옵니다. 메모리 해제를 하지 않아 오류가 나는 것 같아 마지막줄에 메모리해제까지 해봤는데 그대로 런타임에러가 뜹니다. 어떻게 해결할 수 있을까요. 감사합니다.