2009-12-05 102 views
0

我已经成功地编译了这段代码,但是当我到达main的最后一个循环时,我得到一个核心转储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; 
     } 


}; 
+0

您是否尝试过在*,其中*发生错误调试器中运行的代码? – 2009-12-05 02:31:12

+1

哦,在头文件中使用namespace std;是不好的做法,应该避免这种情况。 – 2009-12-05 02:32:21

+1

当我们选择代码时,在不需要使用全局变量的情况下_不使用全局变量._ – 2009-12-05 02:40:39

回答

4

你的for循环试验是不正确:

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

如果阵列具有它的任何元件,该条件array.size()将始终评估为真,并且这将永远循环,永远意味着“直到array[cnt]已经过去了数组的末尾,并且您会收到访问冲突。“

你的意思是沿着线的东西更多:

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