MAGICPOWER 문제 에러 질문드립니다

  • 이현진
    이현진

    MAGICPOWER

    에러메시지

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

    ** 어디서 스택오버플로우가 나는건가요대체 ... ㅠ **

    코드

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <functional>
    using namespace std;
    
    class magic_Power {
    private :
            int itemCount;
            vector<int> itemInfo;
            vector<int>::iterator it;
            int useCount;
            int maxPower;
    public :
            magic_Power(int itemCount, int useCount) { this->itemCount = itemCount; this->useCount = useCount; this->maxPower = 0; }
            void setItemInfo();
            void useMagic();
            int getPower() { return maxPower; }
    };
    void magic_Power::setItemInfo()
    {
            int temp;
            for(int i=0 ; i<itemCount ; i++)
            {
                    cin>>temp;
            while(temp < 1)
            {
                cout<<"input error..."<<endl;
                cin>>temp;
            }
                    itemInfo.push_back(temp);
            }
    }
    void magic_Power::useMagic()
    {
            for(int i=0 ; i<useCount ; i++)
            {
                    for(it = itemInfo.begin() ; it != itemInfo.end() ; it++)
                    {
                            if((*it) == 0)
                                    itemInfo.erase(it);
                    }
    
            sort(itemInfo.begin(), itemInfo.end(), greater<int>());
            it = itemInfo.begin();
                    maxPower += (*it);
                    (*it)--;
            }
    }
    
    int main(void)
    {
            int testCount;
            vector<magic_Power> magic;
            vector<magic_Power>::iterator magicIt;
    
            cin>>testCount;
    
            for(int i=0 ; i<testCount ; i++)
            {
                    int item, use;
    
                    cin>>item>>use;
                    magic_Power *power = new magic_Power(item, use);
                    power->setItemInfo();
                    magic.push_back(*power);
    
                    delete power;
            }
            for(magicIt = magic.begin() ; magicIt != magic.end() ; magicIt++)
            {
                    (*magicIt).useMagic();
                    cout<<(*magicIt).getPower()<<endl;
            }
    
            return 0;
    }
    

    8년 전
1개의 댓글이 있습니다.
  • Being
    Being

    vectorerase()는 조심해서 써야 합니다. 표준을 참고하세요.


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