std::sort() sur std::vector()
Bonjour,
soit un std::vector:
Code:
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:
1 2
|
std::sort( m_ListStation.begin(), m_ListStation.end(), stationPtrCompare ); |
la fonction stationPtrCompare() est déclarée comme ceci :
Code:
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:
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 ? :?:
Re: std::sort() sur std::vector()
Citation:
Envoyé par tut
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.
Il y a pourtant des bugs sur des trucs si utilisés (mais je ne sais pas si ça s'applique à ton cas). Chez moi, trier un grand vecteur revenait à le tronquer. Après avoir appliqué les conseils trouvés là : http://www.dinkumware.com/vc_fixes.html ca c'est mieux passé.