튜토리얼에 있는 LECTURE예제에 관련해서 질문드립니다.
처음에는 재귀를 사용한 quicksort를 사용해서 코드를 작성했었는데 답안을 제출하니
RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)
이라는 런타임 오류가 떴었습니다.
재귀함수 때문이라고 생각하고 비재귀로 배열을 이용하여 코드를 바꿨는데 같은 오류가 뜹니다. 문제가 어디에 있는 것일까요?
아래는 제 코드입니다.
/*입력받은 문자열을 2개씩 분리한 뒤 정렬하여 합친 결과를 반환하여라.*/#include <iostream>#include <string>usingnamespacestd;voidsort(string*arr,intsize);intmain(){intcount;//테스트케이스 수intindex=0;//while문을 돌릴 변수intsize=0;//문자열의 절반 길이를 넣는 변수(2개씩 묶이니까)stringstr;stringresult;//정렬이 완료된 문자열을 넣는 변수string*super;//테스트케이스 개수만큼 나열될 문자 배열string*arr;//자른 문자열을 저장할 변수cin>>count;super=newstring[count];for(inti=0;i<count;i++){cin>>str;size=(str.length())/2;arr=newstring[30];while(!str.empty()){//2개씩 자르기arr[index]=str.substr(0,2);//cout<<arr[index]<<" / "<<str<<endl;str.erase(0,2);index++;}sort(arr,size-1);for(intj=0;j<size;j++){result.append(arr[j]);}super[i]=result;//합쳐진 문자열을 super에 대입//기존에 쓰이던 변수들 초기화index=0;result.erase();}for(inti=0;i<count;i++){cout<<super[i]<<endl;}delete[]super;delete[]arr;return0;}voidsort(string*arr,intsize){int*stack=newint[2*size+2];inttop=-1;intstart,end,left,right;stringpivot;//stack pushstack[++top]=size;stack[++top]=0;while(top!=-1){//stack이 비어있지 않을 때//stack pop(먼저 들어간게 나중에) start=stack[top--];//cout<<"start : "<<start<<endl;//cout<<"start top : "<<top<<endl;end=stack[top--];//cout<<"end : "<<end<<endl;//cout<<"end top : "<<top<<endl;if(start<end){//정렬할만한 크기가 될 때left=start;right=end+1;pivot=arr[left];do{do{left++;}while((left<=end)&&(pivot.compare(arr[left])>=0));do{right--;}while((right>=start)&&(pivot.compare(arr[right])<0));if(left<right){arr[left].swap(arr[right]);}}while(left<right);arr[start].swap(arr[right]);/*for(int i=0;i<size+1;i++){ cout<<arr[i]<<" "; } cout<<endl;*///앞으로 정렬해야 할 범위들을 stack에 저장stack[++top]=end;stack[++top]=right+1;stack[++top]=right-1;stack[++top]=start;}}delete[]stack;}
빠비
튜토리얼에 있는 LECTURE예제에 관련해서 질문드립니다.
처음에는 재귀를 사용한 quicksort를 사용해서 코드를 작성했었는데 답안을 제출하니
RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)
이라는 런타임 오류가 떴었습니다.
재귀함수 때문이라고 생각하고 비재귀로 배열을 이용하여 코드를 바꿨는데 같은 오류가 뜹니다. 문제가 어디에 있는 것일까요?
아래는 제 코드입니다.
8년 전