LECTURE 문제 런타임 오류 확인 부탁드립니다.

  • cisfine
    cisfine

    1) 에러내용 :
    RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)

    2) 질문내용 :
    잘못된 메모리 접근이나 스택 오버플로우가 발생했다고 하는데,

    아마도 배열을 선언하는데 있어 잘못된 방법으로 선언한 것 같습니다.
    (char text[20][1004];)

    보다 나은 선언방법이나, 잘못 접근한 배열 인덱스가 있을까요?

    확인해주시면 감사하겠습니다.

    3) 사용 코드 :

    #include <stdio.h>
    
    int main(){
    
        int T;
        int i, j, k, count;
    
        char    text[20][1004];
        char    temp[2];
        int     count_text[20];
    
        scanf("%d",&T);
    
        for(k=0;k<T;k++)
            scanf("%s", &text[k][0]);
    
        for(k=0;k<T;k++){
            i=0; j=0;
            while(text[k][i]!='\0'){                
                count_text[k] = i++;
            }
        }
    
    
        for(k=0;k<T;k++){       
            for(count=0; count<count_text[k]; count++){
                i=0;
    
                while((text[k][i+4] != '\0')){              
                    if(text[k][i+2]!= '\0'){
                        if( text[k][i+0] > text[k][i+2] ){
                            temp[0] = text[k][i+0];
                            temp[1] = text[k][i+1];
    
                            text[k][i+0] = text[k][i+2];
                            text[k][i+1] = text[k][i+3];
    
                            text[k][i+2] = temp[0];
                            text[k][i+3] = temp[1];
                        }
                    }
    
                    i=i+2;
                }
            }
        }
    
        for(k=0;k<T;k++){       
            for(count=0; count<count_text[k]; count++){
                i=0;
    
                while((text[k][i+4] != '\0')){              
                    if(text[k][i+3]!= '\0'){
                        if( text[k][i+0] == text[k][i+2] ){
                            if( text[k][i+1] > text[k][i+3] ){
                                temp[0] = text[k][i+0];
                                temp[1] = text[k][i+1];
    
                                text[k][i+0] = text[k][i+2];
                                text[k][i+1] = text[k][i+3];
    
                                text[k][i+2] = temp[0];
                                text[k][i+3] = temp[1];
                            }
                        }
                    }
    
                    i=i+2;
                }
            }
        }
    
    
        for(k=0;k<T;k++){
            j=0;
            while( (text[k][j] != '\0') ){
                printf("%c",    text[k][j++]);
                printf("%c",    text[k][j++]);          
            }
            printf("\n");
        }
    
      return 0;
    }
    

    7년 전
3개의 댓글이 있습니다.
  • seo8387
    seo8387

    your array(text) should be inputed only 20 times, but quiz's trial is much more. so you got overflow.


    7년 전 link
  • Corea
    Corea

    테스트 케이스의 수인 T의 제한이 명시되어 있지 않습니다. 문제를 풀이하실 때, 한 케이스의 입력을 받으신 다음 해당 입력에 대한 출력을 매 번 하셔도 됩니다.
    알고스팟 온라인 저지/첫 번째 문제 풀기테스트 케이스 부분을 읽어보시면 도움이 될 것 같습니다.


    7년 전 link
  • cisfine
    cisfine

    답변 모두 감사드립니다.
    출력을 한꺼번에 해야하는 것으로 알고있었네요.
    감사합니다. 좋은 하루 보내세요~


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