Visual Studio C++ list iterator not decementable
I keep getting an error on visual studio that says list iterator not decrementable: line 256
My program works fine on Linux, but the Visual Studio compiler throws this error.
Anyway, do you see what my problem is?
#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 a开发者_Python百科nd 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
You're writing out of bounds of your arr array, it causes stack corruption when running it after compiling with the debugging config in VS2008, even tells you what variables you messed up with.
The problem lies in the fact that you try to write to the length of the array, instead of the length - 1. Not only do you do try writing out of bounds, you also read it later.(Line 122, 133 and 134)
Not getting compiler errors or warnings, nor a debug assertion telling me that I'm trying to decrement a non-decrementable iterator anywhere when I run the program. The error you're seeing could just be a side effect from corrupting the stack, but I'm just guessing there.
精彩评论