[QUADTREE] Recursive 방식으로 런타임 오류가 발생 문의(C코드) unlimmit QUADTREE를 C코드로 Recursive 방식으로 풀었는데 Stack overflow가 발생하는 듯 합니다. 런타임 오류 메시지 : RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow) 제출 소스 보기 #include #define MAX_LEN 1000 char reserve[MAX_LEN+1]; char lt[MAX_LEN+1]; char rt[MAX_LEN+1]; char lb[MAX_LEN+1]; char rb[MAX_LEN+1]; char *reverse_tree(char *str, int *s){ char ch; ch = str[*s]; if(ch=='b' || ch=='w'){ sprintf(reserve, "%c", ch); *s = (*s)++; return reserve; } *s = (*s)++; sprintf(lt, "%s",reverse_tree(str, s)); sprintf(rt, "%s",reverse_tree(str, s)); sprintf(lb, "%s",reverse_tree(str, s)); sprintf(rb, "%s",reverse_tree(str, s)); //sprintf(result, "x%s%s%s%s", lt, rt, lb, rb); // original sprintf(reserve, "x%s%s%s%s", lb, rb, lt, rt); // flip; //sprintf_s(result, "x%s%s%s%s", rt, lt, rb, lb); // mirror; return reserve; } int main(){ int T, tc, N, i, len, s; scanf("%d", &T); char str[MAX_LEN+1]; char result[MAX_LEN+1]; for(tc=0; tc<T; tc++){ scanf("%s", str); len = 0; while(str[len]!='\0') len++; s = 0; sprintf(result, "%s",reverse_tree(str, &s)); printf("%s\n", result); } return 0; } 배열을 전역으로 바꿨는데도 발생하는데 무슨 문제가 있을까요? 도움 부탁드립니다. 9년 전
1개의 댓글이 있습니다. restart *s = (*s)++;는 *s=(*s)+1이나 (*s)++로 바꿔주셔야 합니다; 그리고 전역변수는 reserve만 두어야겠네요.. lt,rt,lb,rb는 전역으로 둘 경우 recursion속에서 서로 섞여버립니다. 포인터 사용은 디버그를 어렵게 만듭니다..ㅠㅠ STL을 사용하세요.. 9년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
unlimmit
QUADTREE를 C코드로 Recursive 방식으로 풀었는데 Stack overflow가 발생하는 듯 합니다.
런타임 오류 메시지 :
RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)
제출 소스 보기
#include
#define MAX_LEN 1000
char reserve[MAX_LEN+1];
char lt[MAX_LEN+1];
char rt[MAX_LEN+1];
char lb[MAX_LEN+1];
char rb[MAX_LEN+1];
char *reverse_tree(char *str, int *s){
}
int main(){
}
배열을 전역으로 바꿨는데도 발생하는데 무슨 문제가 있을까요?
도움 부탁드립니다.
9년 전