제 목 액세스 위반 오류 도와주세요 ㅠㅜ
작성자 lllllllll 등록날짜 2021-12-05 02:35:55 / 조회수 : 695
강좌명 [단과] 게임 프로그래밍 기초 C++ Part.1
첨부파일
  • 과제하다가 오류가 발생해서 질문드립니다!! 실행은 되지만 예외 발생(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;
    }

  • 작성자 : 게임클래스 / 등록날짜 : 2021-12-07 14:50:12
  • 안녕하세요 게임클래스 입니다.

    문의주신 코드를 확인해본 결과 다음과 같은 문제를 발견하였습니다.

    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 루프를 탈출하지 못하는 문제가 발생 합니다.

    해당 부분을 수정하시면 원하시는 결과를 얻으실 수 있을것으로 보입니다.

     

    자세한 정답과 정답 화면을 올려드리고 싶지만.

    학생의 공부를 위해 거기까지 자세하게 설명하지는 않은점 양해 바랍니다.

    감사합니다.