Bonjour, je suis actuellement sur mon projet de C dans lequel je dois effectuer un tri par base (ou radix sort), je précise que je fais du C que depuis récemment.
Le problème qui se pose c'est que là où j'en suis j'ai des fonctions qui appellent d'autres fonctions, dans lequel il y a des malloc et que dés que je sors d'une fault segmentation, ben c'est la fonction suivante, et je tourne en rond. Déjà j'aimerais votre avis sur le createBucketList(int base), parce qu'elle me pose des problèmes de segmentation fault lorsque je veux initialiser ses champs. Je précise que dans la structure BNIntLofL j'avais déclaré en premier lieu un
BaseNIntegerList *BaseNIntegerList[];
mais mon prof me l'a fait remplacer par un
BaseNIntegerList *BaseNIntegerList;
que ce n'était pas la peine, que j'avais simplement à rajouter un x*sizeof() dans le malloc.
EDIT : 19:53
dans createBucketList j'ai enlevé "*" lorsque je fais le second malloc
1 2
|
*L_BNI_LOL->BaseNIntegerList = (BaseNInt*) malloc(base*(sizeof(BaseNInt))); |
en contrepartie j'ai un warning "incompatible pointer type" mais j'ai beaucoup moins de mal à exécuter.
J'ai aussi commenté
1 2 3
|
L_BNI_LOL->BaseNIntegerList[compteurBase]->first = NULL;
L_BNI_LOL->BaseNIntegerList[compteurBase]->last = NULL; |
et la quelques chose d'assez étrange (pour moi) se produit si je fais
1 2 3 4 5
|
printf("\nfirst 0: %p", L_BNI_LOL->BaseNIntegerList[0]->first);
printf("\nlast 0: %p \n", L_BNI_LOL->BaseNIntegerList[0]->last);
printf("\nfirst 1: %p", L_BNI_LOL->BaseNIntegerList[1]->first);
printf("\nlast 1: %p \n", L_BNI_LOL->BaseNIntegerList[1]->last); |
dans le main hé bien les 2 du milieu (last 0 et first 1) renvois la même valeur (je mets la PJ à jour)
Partager