Bonjour,

mon problème est le suivant : j'aimerais parcourir une list avec un iterator, non const car j'appelle des méthodes des objets contenus dans la collection, et tout se passe très bien jusqu'à l'exécution où, au 2e parcours de la collection (car j'itère à l'intérieur d'une autre boucle), le programme plante et j'obtiens un zouli message d'erreur :

Debug assertion failed !
...
Expression : list iterator not dereferencable
...
Voici mon code :

d'abord où j'initialise la list :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
list<SjSl_Balloon> ballons;
SjSl_Timer timer;
 
srand(time(NULL));
for(unsigned int x=0; x<dim[0]; x++){
	for(unsigned int y=0; y<dim[1]; y++){
		for(unsigned int z=0; z<dim[2]; z++){
			int pos[3]={x, y, z};
			for(unsigned int nbBallon=0; nbBallon<SjSl_Random::GetInt(0, 3); nbBallon++){
				SjSl_Balloon tmp(timer, pos);
				ballons.push_back(tmp);
			}
		}
	}
}
et ensuite où je l'utilise :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
list<SjSl_Balloon>::iterator itB;
list<SjSl_WeatherStation>::iterator itS;
list<SjSl_WeatherStation> stations=earth.GetStations();
while(true){
	for(unsigned int d=0; d<31; d++){
		for(unsigned int h=0; h<24; h++){
			for(unsigned int mn=0; mn<60; mn++){
				for(unsigned int s=0; s<60; s++){
					int currentTime[4]={d, h, mn, };
					timer.SetTime(currentTime);
                                                                _sleep(10);
				}
			}
			itB=ballons.begin();
			for(; itB!=ballons.end(); itB++){
				(*itB).Move(earth);
				cout<<*itB<<endl;
			}
		}
		itS=stations.begin();
		for(; itS!=stations.end(); itS++){
			(*itS).BulletinMeteo();
			cout<<"Bulletins météo rangés dans le répertoire ulletins"<<endl;
		}
	}
}
Je n'arrive vraiment pas à comprendre d'où le problème peut venir car tout se passe au premier de la list ballons. En ce qui concerne la liste stations, je n'ai pas encore pu tester puisque le programme n'arrive pas jusque là...