과제하다가 오류가 발생해서 질문드립니다!! 실행은 되지만 예외 발생(0x00CBB890, ConsoleApplication2.exe): 0xC0000005: 0x00740000 위치를 기록하는 동안 액세스 위반이 발생했습니다.. 라는 오류가 뜹니다 ㅠㅜ
#include
int main()
{
// [0][0] [0][1] [0][2] [0][3] [0][4]
// [1][0] [1][1] [1][2] [1][3] [1][4]
// [2][0] [2][1] [2][2] [2][3] [2][4]
// [3][0] [3][1] [3][2] [3][3] [3][4]
// [4][0] [4][1] [4][2] [4][3] [4][4]
char szStar[4][5][5];
for (int i = 0; i < 5; i++)
{
for (int j = 0; i < 5; j++)
{
if (i >= j)
szStar[0][i][j] = '*';
else
szStar[0][i][j] = '-'; // 여기서 액세스 위반했다고 오류가 뜹니다
}
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; i < 5; j++)
{
if (i + j >= 4)
szStar[1][i][j] = '*';
else
szStar[1][i][j] = '-';
}
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; i < 5; j++)
{
if (j >= i)
szStar[2][i][j] = '*';
else
szStar[2][i][j] = '-';
}
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; i < 5; j++)
{
if (i + j <= 4)
szStar[3][i][j] = '*';
else
szStar[3][i][j] = '-';
}
}
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 5; j++)
{
for (int k = 0; k < 5; k++)
{
std::cout << szStar[i][j][k];
}
std::cout << std::endl;
}
std::cout << std::endl << std::endl;
}
system("pause");
return 0;
}
안녕하세요 게임클래스 입니다.
문의주신 코드를 확인해본 결과 다음과 같은 문제를 발견하였습니다.
for (int i = 0; i < 5; i++)
{
for (int j = 0; i < 5; j++)
{
if (i >= j)
szStar[0][i][j] = '*';
else
szStar[0][i][j] = '-'; // 여기서 액세스 위반했다고 오류가 뜹니다
}
}
저 부분에서 액세스 위반했다고 오류가 발생했다고 하셨는데
저 부분이 가장 위에 있는 액세스 위반 오류라고 나오는 것이지 이 아래의 for문에서도 전부 액세스 위반이 발생할 것으로 예상 됩니다.
배열을 사용할때 액세스 오류라는 부분은, 보통 할당되지 않은 배열 번호를 호출하려 했을때 발생 합니다.
저 부분의 코드를 본 결과
첫번째 for 구문은 이상이 없어 보이나
두번째 for 구문에서
for (int j = 0; i < 5; j++)
부분을 보면 j를 변수로 반복을 시키는데 i 값으로 조건을 체크하고 있어서 j값이 변화하지 않으면서, i값만 계속 변화하기 때문에
2번째 for 루프를 탈출하지 못하는 문제가 발생 합니다.
해당 부분을 수정하시면 원하시는 결과를 얻으실 수 있을것으로 보입니다.
자세한 정답과 정답 화면을 올려드리고 싶지만.
학생의 공부를 위해 거기까지 자세하게 설명하지는 않은점 양해 바랍니다.
감사합니다.