Bonjour,
soit un std::vector:
La classe Station est une classe que j'ai d�fini.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2typedef std::vector<Station*> ListStation; ListStation m_ListStation;
Je veux trier le vector, pour cela je fais :
la fonction stationPtrCompare() est d�clar�e comme ceci :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 std::sort( m_ListStation.begin(), m_ListStation.end(), stationPtrCompare );
elle est de port�e globale.
Code : S�lectionner tout - Visualiser dans une fen�tre � part bool stationPtrCompare( Station* p1, Station* p2 )
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 :
je sais, sprintf()/char[] c'est du C, mais, c'est du code de d�buggage.
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 ); }
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 ?:
Partager