QUADTREE 문제 런타임 오류때문에 질문드립니다

  • mbkim95
    mbkim95

    리눅스환경에서 예제 입력을 통해 정답을 확인하고 답안을 제출했는데 런타임 오류가 발생했다고 하네요...
    부족한 코드지만 한번 보시고 원인을 알려주시면 감사하겠습니다.
    c언어로 작성했습니다.

    RTE (SIGABRT: program aborted, probably assertion fail)

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int idx = 0;
    
    char* reverse(char* str){
        char* result = (char *)malloc(sizeof(1024*sizeof(char)));   
        if(str[idx] == 'b'){
            idx++;
            return "b";
        }else if(str[idx] == 'w'){
            idx++;
            return "w"; 
        }
        idx++;
        char* ul = reverse(str);    
        char* ur = reverse(str);
        char* ll = reverse(str);
        char* lr = reverse(str);
    
        sprintf(result, "x%s%s%s%s", ll, lr, ul, ur);
    
        return result;
    }
    
    int main(void)
    {
        int c;
        char code[1024];
        char *answer;
    
        scanf("%d", &c);
        while(c--){
            idx = 0;        
            scanf("%s", code);      
            answer = reverse(code);     
            printf("%s\n", answer);     
        }   
    }
    

    7년 전
2개의 댓글이 있습니다.
  • snowas
    snowas

    널문자 삽입 문제인줄 알았는데, 다시보니까 sprintf로 배열에 스트링을 옮겨담을때 중간에 끼인 문자들의 널문자가 사라지나요?
    안전한 strcat을 사용해보는게 어떨까 싶습니다.


    7년 전 link
  • seico75
    seico75

    sizeof(char) == 1 이므로

    sizeof(1024 * sizeof(char))
    == sizeof( 1024 * 1)
    == sizeof( 1024)
    == 4 (1024 가 int 이므로)

    1024 * sizeof( char) 가 되어야 하겠네요..

    그리고 result 의 메모리릭 때문에
    문자열이 커지고 case 가 많아지면 메모리 할당이 되지 않아 문제가 생길 수도 있을 것 같습니다.


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