lecture 문제 runtime 오류 질문드립니다.

  • youngkyo
    youngkyo

    코드는 아래와 같은데요
    수행 시 RTE (SIGABRT: program aborted, probably assertion fail) 와 같이 에러가 발생하는데 어디서 문제인지 확인을 못하겠습니다.
    해당 내용 확인좀 부탁드립니다.

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    int main()
    {
        int count;
        cin >> count;
        char input[1001] = { 0, };
        char output[1001] = { 0, };
        char** number; 
    
        while (count--)
        {
            cin >> input;
            int length = strlen(input) / 2;
            number = new char*[length];
    
            for (int i = 0; i < length; i++)
            {
                number[i] = new char[3];
            }
    
            for (int i = 0; i < length; i++)
            {
                number[i][0] = input[i * 2];
                number[i][1] = input[i * 2 + 1];
                number[i][2] = NULL;
            }
    
            char temp[3] = { 0, };
            for (int i = 0; i < length; i++)
            {
                for (int j = 0; j < length - 1; j++)
                {
                    if (strcmp(number[j], number[j + 1]) > 0)
                    {
                        strcpy(temp, number[j]);
                        strcpy(number[j], number[j + 1]);
                        strcpy(number[j + 1], temp);
                    }
                }
            }
            for (int i = 0; i < length; i++)
            {
                strcat(output, number[i]);
                delete [] number[i];
            }
            char* temp1 = "\n";
            strcat(output, temp1);
    
        }
        cout << output;
        return 0;
    } 
    

    10년 전
6개의 댓글이 있습니다.
  • Taeyoon_Lee
    Taeyoon_Lee

    마지막에 \n 붙인 것 때문에 배열을 1002개 잡아야 할 것 같아요.


    10년 전 link
  • youngkyo
    youngkyo

    1002개로 잡아서 해봣는데도 안되네요;; 대체 어느부분이 문제인지;


    10년 전 link
  • Taeyoon_Lee
    Taeyoon_Lee

    아.. 다 모아서 한 번에 출력하는군요. 그럴 필요가 없는데... 그렇다면 (1002 * 테스트 케이스 개수) 만큼 배열을 잡아야 안전하겠죠?


    10년 전 link
  • Taeyoon_Lee
    Taeyoon_Lee

    사실.. 어느 부분이 문제인지 찾기 어려운 이유 중 하나는 strlen, strcmp, strcpy, strcat 같은 것을 쓰기 때문입니다. 아래 강의 자료를 추천합니다.
    https://speakerdeck.com/jongman/writing-correct-code


    10년 전 link
  • Taeyoon_Lee
    Taeyoon_Lee

    참고로 저라면 이렇게 고치겠습니다.

        char* temp1 = "\n";
        strcat(output, temp1);
    
      }
      cout << output;
    

    위 부분을

        cout << output << endl;
    //    char* temp1 = "\n";
    //    strcat(output, temp1);
    
      }
    //  cout << output;
    

    10년 전 link
  • youngkyo
    youngkyo

    아.. 테스트케이스만큼 배열을 안잡앗네요.. 간단한건데 생각도 못햇네요..정말 감사합니다.

    Taeyoon_Lee님 덕분에 문제해결할 수 있었습니다.


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