Erreur de compilation indebugable
Bonjour à tous,
J'implémente actuellement la structure Tas, et j'obtient lors de la compilation sous Mac os X.5 l'erreur suivante :
Code:
1 2
| tas(1376) malloc: *** error for object 0x100170: double free
*** set a breakpoint in malloc_error_break to debug |
Ce qui est étrange c'est que sous Ubuntu ca se compile tous seule:
Voila à quoi ressemble le module:
Code:
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
#include <stdio.h>
#include <stdlib.h>
#include <memoire.h>
#include "tas.h"
#define BLOC 4
struct tas{
int dernier;
int taille_physique;
int *arbreBinaire;
};
typedef struct tas *tas;
tas
creerTas(void){
tas tas_cree=memoire_allouer(sizeof(struct tas));
tas_cree->dernier=0;
tas_cree->taille_physique=BLOC;
tas_cree->arbreBinaire=memoire_allouer(BLOC*sizeof(int));
return tas_cree;
}
void
libererTas(tas T)
{
memoire_liberer(T->arbreBinaire);
memoire_liberer(T);
}
void
agrandirTas(tas T)
{
while(T->dernier >= T->taille_physique)
T->taille_physique += BLOC;
memoire_reallouer(T->arbreBinaire, T->taille_physique *sizeof(T->arbreBinaire));
}
void
insererValeur(tas T, int valeur)
{
if(T->dernier >= T->taille_physique)
agrandirTas(T);
T->arbreBinaire[T->dernier]=valeur;
T->dernier=(T->dernier)+1;
/*T->arbreBinaire[T->dernier]=valeur;*/
}
void
afficheTas(tas T)
{
int nombre_element=T->dernier;
for (int i=0; i < nombre_element; i++)
printf("%d ", T->arbreBinaire[i]);
printf("\n");
}
int
main(int argc, char * argv[])
{
tas T=creerTas();
insererValeur(T,5);
insererValeur(T,7);
insererValeur(T,5);
insererValeur(T,7);
insererValeur(T,5);
insererValeur(T,7);
insererValeur(T,5);
insererValeur(T,7);
insererValeur(T,5);
insererValeur(T,7);
insererValeur(T,5);
insererValeur(T,7);
afficheTas(T);
printf("Taille physique= %d \n", T->taille_physique);
libererTas(T);
return EXIT_SUCCESS;
} |
J'anticipe certaine question, memoire_allouer, memoire_reallouer et memoire_liberer ne sont rien d'autre que des malloc, realloc et free avec des assert derrière, le problème survient quand on utilise les fonctions classiques.
Je remercie tous ce qui passeront un peu de temps dessus ...:roll: