[ENCODING] 메모리 참조 오류 Error

  • ntinamu
    ntinamu

    ENCODING

    문제 풀이 의도
    1. 먼저 문자를 입력받아 각 문자마다 5자리 이진수로 바꿉니다.
    (이렇게 전체 문자를 바이너리로 변환한 배열로 바꾸었습니다.)
    2. 전체 바이너리 1차원 배열을 주어진 행과 열의 수에 맞춰
    시계 방향으로 돌아가면서 하나하나 넣어줍니다.
    3. 다 만들어진 배열들을 행 기준으로 모두 출력합니다.

    이 코드에서 뭔가 메모리 참조 오류가 난거 같은데 아무리 찾아봐도 보이지가 않습니다 ㅠㅠ

    #include <stdio.h>
    #include <string.h>
    
    char str[100];
    
    int arr[50][50];
    int row, col;
    
    void printArr(int itx)  //시계방향 만들어진 행렬을 행 기준으로            
                                //모두 출력
    {
        int i, j;
    
        printf("%d ", itx + 1);
    
        for(i = 0; i < row; i++)
        {
            for(j = 0; j < col; j++)
                printf("%d", arr[i][j]);
        }
    
        printf("\n");
    }
    
    void init(void) //배열 초기화
    {
        int i, j;
    
        for(i = 0; i < 50; i++)
        {
            for(j = 0; j < 50; j++)
                arr[i][j] = 0;
        }
    }
    
    void encoding(void) //문자열을 바이너리로 바꿔 배열에 저장
    {
        int flag = 0;
    
        int temp[500];
        char temp2[100];
    
        int cnt = 0;
        int cnt2 = 0;
    
        int num;
    
        int strSize;
        int i, j;
    
        int diff = 1;
        int diff2 = 1;
    
        strSize = strlen(str);
    
        for(i = 0; i < strSize; i++)
        {
            if(i == 0)
                continue;
    
            if(str[i] == '\n')
            {
                continue;
            }
    
            temp2[cnt2++] = str[i];
        }
    
        temp2[cnt2] = '\0';
    
        strSize = strlen(temp2);
    
        for(i = 0; i < strSize; i++)
        {
            if(temp2[i] == ' ')
                num = 0;
            else
                num = (int)temp2[i] - 64;
    
            cnt = 0;
    
            for(j = 0; j < 5; j++)
            {
                temp[5 * (i + 1) - cnt - 1] = num % 2;
                cnt++;
                num /= 2;
            }
        }
    
        cnt = 0;
    
        for(i = 0; i < col; i++)
        {
            arr[0][i] = temp[cnt++];
    
            if(cnt == strSize * 5)
            {
                flag = 1;
                break;
            }
        }
    
        while(1)
        {
            if(flag == 1)
                break;
    
            for(i = 0; i < row - diff; i++)
            {
    
                arr[i + diff2][col - diff2] = temp[cnt++];
                if(cnt == strSize * 5)
                {
                    flag = 1;
                    break;
                }
            }
    
            if(flag == 1)
                break;
    
            for(i = 0; i < col - diff; i++)
            {
                arr[row - diff2][col - i - 1 - diff2] = temp[cnt++];
                if(cnt == strSize * 5)
                {
                    flag = 1;
                    break;
                }
            }
    
            if(flag == 1)
                break;
    
            diff++;
    
            for(i = 0; i < row - diff; i++)
            {
                arr[row - i - 1 - diff2][diff2 - 1] = temp[cnt++];
                if(cnt == strSize * 5)
                {
                    flag = 1;
                    break;
                }
            }
    
            if(flag == 1)
                break;
    
            for(i = 0; i < col - diff; i++)
            {
                arr[diff2][diff2 + i] = temp[cnt++];
                if(cnt == strSize * 5)
                {
                    flag = 1;
                    break;
                }
            }
    
            if(flag == 1)
                break;
    
            diff++;
            diff2++;
    
        }
    }
    
    int main(void)
    {
        int testcase;
        int itx;
        int i;
    
        scanf("%d", &testcase);
    
        for(itx = 0; itx < testcase; itx++)
        {
            init();
    
            scanf("%d %d", &row, &col);
    
            gets(str);
    
            encoding();
            printArr(itx);
        }
    
        return 0;
    }
    

    어떤 부분이 문제인지 도와주시면 정말 감사하겠습니다 ㅠㅠ


    9년 전
0개의 댓글이 있습니다.
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.