Bonjour,
soit un std::vector:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
typedef std::vector<Station*> ListStation;
ListStation m_ListStation;
La classe Station est une classe que j'ai défini.
Je veux trier le vector, pour cela je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
std::sort( m_ListStation.begin(), m_ListStation.end(), stationPtrCompare );
la fonction stationPtrCompare() est déclarée comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
bool stationPtrCompare( Station* p1, Station* p2 )
elle est de portée globale.

Bon, ça compile, no problemo.

MAIS, quand j'exécute ça plante : "access violation".
En utilisant le debugger (Visual C++ 6.0), je vois que ma fonction stationPtrCompare() est appelée avec p1==0xcdcdcdcd.
Hum, ça sent le pointeur pourri.
Donc, juste avant d'appeler std::sort, je dumpe le contenu de mon vector, comme ceci :
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
 
/*! sort the station collection */
void StationCollection::sortStationCollection()
{
	// TEST JULIEN
	char Buff[255];
	for (int i=0; i<m_ListStation.size(); i++)
	{
		sprintf( Buff, "m_ListStation[%d]=%X\n",i,m_ListStation[i]);
		TRACE(Buff);
	}
 
 
	std::sort( m_ListStation.begin(), m_ListStation.end(), stationPtrCompare );
}
je sais, sprintf()/char[] c'est du C, mais, c'est du code de débuggage.
Bref, le pointeur 0xcdcdcdcd ne se trouve pas dans mon vector juste avant l'appel à std::sort.
Je ne comprends pas pourquoi ma fonction stationPtrCompare() est appelée avec cette valeur bizarre.
Ca m'étonnerait très fortement que la STL fournie avec Visual C++ 6.0 soit buggée sur un truc aussi utilisé que cela.
Des idées ? :