LECTURE 문제 질문입니다.

  • Bong32
    Bong32

    RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)

    소스

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int num;
        cin >> num;
        string *third = new string [100];
        int cp=0;
        while(num>0)
        {
                    string first;
                    string *second= new string[100];
                    cin>> first;
                    int len = first.length();
                    if(len >1000){ // string이 1000보다 길 경우 종료 
                        return 0;
                    }
    
    
                    char *ch;
                    ch = new char[1000];
                    for(int i=0; i< len; i++)
                    {
                            ch[i]=first.at(i);
                            if('a' <= ch[i] && ch[i] <= 'z'){}
                            else { return 0;}
                            }
                    for(int i=0; i<len; i++){
                        if(first.length()> 2*i){
                        second[i]=first.substr(i*2,2);
                        }
                       }
                    for(int i=0; i<len; i++){
                            for(int y=0; y<len; y++){
                                    if(second[i] < second[y]){
                                                     string change;
                                                     change=second[i];
                                                     second[i]=second[y];
                                                     second[y]=change;
                                                        }
                                                    }
                                                }
                    for(int i=0; i<len; i++){
                            third[cp] += second[i];
                            }
                   num--;
                   cp++;
                   delete [] ch;
                   delete [] second;
        }         
        for(int i=0; i<cp ; i++){
                cout << third[i] << endl;
                }   
        delete [] third;
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    오버스택 때문에 동적할당도 해보고 배열수도 줄여보고 여러번 해봤지만 자꾸 런타임오류가 뜹니다.. 제 수준에서 해결하기가 힘들어서 질문올립니다.
    뭐가문제일까요...ㅜㅠ


    10년 전
3개의 댓글이 있습니다.
  • Being
    Being

    최소한 코드 들여쓰기는 맞춰 주세요.


    10년 전 link
  • Taeyoon_Lee
    Taeyoon_Lee

    second[i]=first.substr(i*2,2);
    i가 최대 499까지 될 수 있는 것 같은데, second 배열은 100개를 잡으셨네요.


    10년 전 link
  • Being
    Being

    그리고 third에 second를 넣으시는 부분에도 문제가 있습니다.


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