Noxk
Messages postés10Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention27 mars 2007
-
11 mars 2006 à 17:11
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 2011
-
12 mars 2006 à 17:22
bonjour,
voila j'ai un probleme avec qsort j'esssaie de faire un tri sur un tableau de structure mais j'obtiens une erreur d'acces violation, apparemment j'oublie une chose quelque part mais je ne vois pas ou. Voila mon code :
struct ESSAI
{
char car;
int Nb1;
int Nb2;
char *alpha;
};
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 12 mars 2006 à 15:50
Salut,
La callback compare prend en parametre des pointeurs sur les elements
du tableau, ces element sont eux meme des pointeurs, donc au finale a
et b sont en fait des ESSAI**.
Par exemple:
int compare (const void *a, const void *b)
{
ESSAI* one = *(ESSAI**)a;
ESSAI* two = *(ESSAI**)b;
return _stricmp(one->alpha, two->alpha);
}
Ensuite pour l'appel de la fonction qsort, le troisieme param est bien la taille d'un element du tableau, soit sizeof(ESSAI*):
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 12 mars 2006 à 11:14
Salut,
Peut-etre est-ce que cela vient du fait que tu veux instancier 100.000 objets ESSAI ? Vérifie que le new alloue bel et bien de la mémoire à chacun de tes objets. (de plus Array1 n'est pas défini )
Dans ta fonction compare, il y a quelque chose que je ne saisis pas.
a->alpha est déja un char*...alors pourquoi le casté en char** (au lieu de faire '&') ? Puis de tout façon, tu mets un * devant le tout, alors je ne comprend pas l'interet de caster juste avant!
Pourquoi ne pas écrire ça comme ça ?
L'erreur vient peut-etre d'ici...toi tu passes en premier argument '*Array'. Or Array est un ESSAI*. En plus, la taille totale du tableau n'est pas égale à ESSAI* !! Try ceci et tient moi au courant :
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 12 mars 2006 à 17:22
Salut,
Ben merci Aardman pour cette explication ! Pour le ESSAI** j'ai parlé trop vite...j'aurais trouvé ça en parlant moi vite et en réfléchissant avant
Pour qsort() je ne l'ai jamais utilisé, j'ai juste vu sur un site que le troisieme paramètre était "size_t taille"; donc j'en ai conclu (trop rapidement) que c'était la taille du tableau entier.
Hmmm...enfait je suis stupide, c'est logique même que ce soit la taille d'un seul élément...ça permet à la fonction de traiter le pointeur Array correctement afon de bien donner à la fonction compare() des void* de la taille de ESSAI*... j'étais fatigué avant moi, je suis excusable, non?