核心转储例外

时间:2009-12-05 02:27:57

标签: c++ exception

我已经成功编译了这段代码,但是当我到达main中的最后一个for循环时,我得到了一个核心转储handle_exception。我该如何解决这个问题?

的main.cpp

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include "DRSequence.h"
using namespace std;

vector <DRSequence> array;

int indexOfSequenceWithFirstWord(string word){
    for(unsigned int cnt=0;cnt<array.size();cnt++){
        DRSequence s = array[cnt];
        if(word.compare(s.firstWord())==0)
            return cnt;
    }
    return -1;

}


int main(int argc, char **argv) {

    cout << "Opening File:" <<  argv[1] << "\n";


    string in;
    ifstream inFile;
    inFile.open(argv[1]);
    if (!inFile) { cout << "Unable to open file"; exit(1); }

    unsigned int cnt = 0;
    DRSequence sequence;

    while (inFile >> in) {
        if(cnt % 2 == 0){
            int index = indexOfSequenceWithFirstWord(in);
            if(index<0){
                sequence.setFirstWord(in);
                array.push_back(sequence);
            }else
                sequence = array[index];

        }
        cnt++;
    }
    inFile.close();


    for(cnt=0;array.size();cnt++){
        DRSequence s = array[cnt];
        s.description();
    }

    return 0;
}

DRSquence.h

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class DRSequence {
    string first;
    vector <DRSequence> array;
    int count;
  public:

    void description(){
        cout << first << "\n"; 
        for(unsigned int cnt=0;cnt < array.size(); cnt++){
            cout << "\t" << array[cnt].firstWord() << " " << array[cnt].countDegree() << "\n";
        }
    }

    void setFirstWord(string s1){
        first = s1;
    }
    string firstWord(){
        return first;
    }

    int countDegree(){
        return count;
    }

    void addSecondWord(string s){

    }


  private:

    int indexOfSequenceWithWord(string word){
        for(unsigned int cnt=0;cnt < array.size();cnt++){
            DRSequence s = array[cnt];
            if(word.compare(s.firstWord())==0)
                return cnt;
        }
        return -1;
        }


};

1 个答案:

答案 0 :(得分:4)

您的for循环测试不正确:

for(cnt=0;array.size();cnt++){

如果数组中包含任何元素,则条件array.size()将始终计算为true,这将永远循环,其中永远意味着“直到array[cnt]超过数组的末尾并且您得到访问违规。“

你的意思更多的是:

for(cnt=0; cnt < array.size(); ++cnt) {