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