2009-12-05 7 views
0

J'ai réussi à compiler ce code, mais lorsque je suis arrivé à la dernière boucle for principale, j'obtiens un vidage de la mémoire handle_exception. Comment puis-je réparer ça?Exception de vidage de noyau

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

Avez-vous essayé l'exécution du code dans un débogueur * où * l'erreur se produit? –

+1

Oh, et 'using namespace std;' dans un fichier d'en-tête est une mauvaise pratique, évitez cela. –

+1

Pendant que nous choisissons le code, n'utilisez pas de variables globales pour lesquelles vous n'avez pas besoin d'utiliser des variables globales. –

Répondre

4

Votre boucle for test est incorrect:

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

Si le tableau a des éléments qu'il contient, la condition array.size() va toujours évaluer à vrai et cela sera boucle pour toujours, où signifie toujours "jusqu'à array[cnt] est passé la fin du tableau et vous obtenez une violation d'accès. "

Vous voulez dire quelque chose de plus le long des lignes de:

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