Bonjour, voici mon probleme.
j'ai une struct toute simple. j'ai un tableau de pointeur sur des elements de la structure...
et je veux le trier avec un qsort.
ca compile mais ca ne trie rien du tout.
en debugage (VC++6) je vois bien que l'adresse que je recoit dans ma fonction de trie n'est pas une des adresse de mes objets.
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
int sort_function( const void *a, const void *b); // prototypage de ma fonction de tri.
 
struct personne // définition de la structure (en global)
{ char * nom;
   long age;
};
 
struct personne* liste[3]; // en global mon tableau
struct personne a1= {"isa",3}; 
struct personne a2= {"steph",33};
struct personne a3= {"fred",30};
 
int main (void)  // point d'entree
{
 liste[0]=&a1; // affectations
 liste[1]=&a2;
 liste[2]=&a3;
int i=0;
 
// affichage avant...
 for ( i = 0; i <3; i++)  printf("%d %s à %d\n",i, liste[i]->nom,liste[i]->age);
 printf("\n\n");
 
 qsort((void *)liste, 3, sizeof(liste[0]), sort_function);
 
// affichage apres
 for ( i = 0; i <3; i++)  printf("%d %s à %d\n",i, liste[i]->nom,liste[i]->age);
 
return 0;
}
 
//--- la fonction de tri.
int sort_function( const void *a, const void *b)
{
	// trie par age :
	struct personne* aa, *bb;
	aa=(struct personne*)a;
	bb=(struct personne*)b;
  //--return ((personne*)a)->age -  ((personne*)b)->age ;
 
	long aaa,bbb; // je detaille, marche pas mieux
	aaa=aa->age;
	bbb=bb->age;
	return aaa-bbb;
/*   
   // trie par nom :
   return  strcmp(((personne*)a)->nom,((personne*)b)->nom); 
/**/
}
bon voilà, pour l'instant c'est sensé trier pas age (la partie de trie par nom est commenté, mais elle ne marche pas mieux)
le resultat : on a fred (30) puis isa (3) puis steph (33).
c'est donc pas trié.

qqun vois ce qui ne vas pas ??

merci.