2010-06-08 2 views
-5

Je continue à obtenir une erreur sur le studio visuel qui dit list iterator not decrementable: line 256Visual Studio C++ liste iterator pas decementable

Mon programme fonctionne très bien sous Linux, mais le compilateur Visual Studio jette cette erreur.

De toute façon, voyez-vous quel est mon problème?

#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <list> 

using namespace std; 

int main(){ 

    /** create the list **/ 
    list<int> l; 

    /** create input stream to read file **/ 
ifstream inputstream("numbers.txt"); 

/** read the numbers and add them to list **/ 
if(inputstream.is_open()){ 

    string line; 
    istringstream instream; 
    while(getline(inputstream, line)){ 
     instream.clear(); 
     instream.str(line); 

     /** get he five int's **/ 
     int one, two, three, four, five; 
     instream >> one >> two >> three >> four >> five; 

     /** add them to the list **/ 
     l.push_back(one); 
     l.push_back(two); 
     l.push_back(three); 
     l.push_back(four); 
     l.push_back(five); 
    }//end while loop 

}//end if 

/** close the stream **/ 
inputstream.close(); 

/** display the list **/ 
cout << "List Read:" << endl; 
list<int>::iterator i; 
for(i=l.begin(); i != l.end(); ++i){ 
    cout << *i << " "; 
} 
cout << endl << endl; 

/** now sort the list **/ 
l.sort(); 

/** display the list **/ 
cout << "Sorted List (head to tail):" << endl; 
for(i=l.begin(); i != l.end(); ++i){ 
    cout << *i << " "; 
} 
cout << endl; 

list<int> lReversed; 
for(i=l.begin(); i != l.end(); ++i){ 
    lReversed.push_front(*i); 
} 
cout << "Sorted List (tail to head):" << endl; 
for(i=lReversed.begin(); i!=lReversed.end(); ++i){ 
    cout << *i << " "; 
} 
cout << endl << endl; 

/** remove first biggest element and display **/ 
l.pop_back(); 
cout << "List after removing first biggest element:" << endl; 
cout << "Sorted List (head to tail):" << endl; 
for(i=l.begin(); i != l.end(); ++i){ 
    cout << *i << " "; 
} 
cout << endl; 
cout << "Sorted List (tail to head):" << endl; 
    lReversed.pop_front(); 
    for(i=lReversed.begin(); i!=lReversed.end(); ++i){ 
    cout << *i << " "; 
} 
cout << endl << endl; 

    /** remove second biggest element and display **/ 
l.pop_back(); 
cout << "List after removing second biggest element:" << endl; 
cout << "Sorted List (head to tail):" << endl; 
for(i=l.begin(); i != l.end(); ++i){ 
    cout << *i << " "; 
} 
    cout << endl; 

    lReversed.pop_front(); 
cout << "Sorted List (tail to head):" << endl; 
for(i=lReversed.begin(); i!=lReversed.end(); ++i){ 
    cout << *i << " "; 
} 
cout << endl << endl; 

/** remove third biggest element and display **/ 
l.pop_back(); 
cout << "List after removing third biggest element:" << endl; 
cout << "Sorted List (head to tail):" << endl; 
for(i=l.begin(); i != l.end(); ++i){ 
    cout << *i << " "; 
} 
    cout << endl; 
cout << "Sorted List (tail to head):" << endl; 
lReversed.pop_front(); 
for(i=lReversed.begin(); i!=lReversed.end(); ++i){ 
    cout << *i << " "; 
} 
cout << endl << endl; 

/** create frequency table **/ 
const int biggest = 1000; 

//create array size of biggest element 
int arr[biggest]; 
//set everything to zero 
for(int j=0; j<biggest+1; j++){ 
    arr[j] = 0; 
} 

//now update number of occurences 
for(i=l.begin(); i != l.end(); i++){ 
    arr[*i]++; 
} 

//now print the frequency table. only print where occurences greater than zero 
cout << "Final list frequency table: " << endl; 
for(int j=0; j<biggest+1; j++){ 
    if(arr[j] > 0){ 
     cout << j << ": " << arr[j] << " occurences" << endl; 
    } 
} 




    return 0; 
}//end main 
+3

+1 décrémentiable –

+2

Ligne 256? Le fichier ne contient que 137 lignes ... –

+1

Qu'en est-il au moins * d'essayer * de supprimer les éléments non pertinents de ces 100 lignes avant de demander de l'aide? – doublep

Répondre

3

Vous écrivez en dehors des limites de votre tableau arr, il provoque la corruption de la pile lors de l'exécution après la compilation avec la configuration de débogage dans VS2008, même vous indique quelles variables vous foiré avec. Le problème réside dans le fait que vous essayez d'écrire sur la longueur du tableau, au lieu de la longueur - 1. Non seulement vous essayez d'écrire en dehors des limites, mais vous le lisez aussi plus tard (Ligne 122, 133 et 134)

N'obtenant pas d'erreurs ou d'avertissements du compilateur, ni d'assertion de débogage m'indiquant que j'essaie de décrémenter un itérateur non décrémentable n'importe où quand j'exécute le programme. L'erreur que vous voyez pourrait juste être un effet secondaire de corrompre la pile, mais je devine juste là.