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 ? :