QUADTREE 문제 런타임 오류때문에 질문드립니다 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 널문자 삽입 문제인줄 알았는데, 다시보니까 sprintf로 배열에 스트링을 옮겨담을때 중간에 끼인 문자들의 널문자가 사라지나요? 안전한 strcat을 사용해보는게 어떨까 싶습니다. 7년 전 link 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일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
mbkim95
리눅스환경에서 예제 입력을 통해 정답을 확인하고 답안을 제출했는데 런타임 오류가 발생했다고 하네요...
부족한 코드지만 한번 보시고 원인을 알려주시면 감사하겠습니다.
c언어로 작성했습니다.
RTE (SIGABRT: program aborted, probably assertion fail)
7년 전