glibc detected *** realloc(): invalid next size
Bonjour à tous.
J'execute un programme sous c et un problème a lieu, voici l'erreur :
Code:
*** glibc detected *** realloc(): invalid next size: 0x0804b088 ***
Je pense que l'erreur viens de cette ligne :
Code:
pop->tab = (PPersonne*)realloc(pop->tab,sizeof(PPersonne));
voici à quoi correspondent PPersonne (c'est en fait un pointeur de Personne)
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| typedef struct
{
t_id id;
char nom[32];
char prenom[32];
int codepostal_naissance;
char pays_naissance[32];
} Personne;
typedef Personne* PPersonne; |
et pop->tab est un PopTab :
Code:
1 2 3 4 5 6 7 8 9 10
| typedef struct
{
PPersonne* tab; // Tableau de PPersonne (PPersonne etant un pointeur sur une Personne)
// Personne* *tab; // On peut aussi l'ecrire comme ca
unsigned int taille_pop;
unsigned int taille_tab;
} PopTab; |
Quelqu'un aurait-il une idée... ça fait un moment que je planche dessus...
Voilà, j'espère avoir été assez clair... si ça n'est pas le cas n'hésitez pas à me le faire remarquer !
:)
Re: glibc detected *** realloc(): invalid next size
Citation:
Envoyé par Miksimus
Code:
*** glibc detected *** realloc(): invalid next size: 0x0804b088 ***
Je pense que l'erreur viens de cette ligne :
Code:
pop->tab = (PPersonne*)realloc(pop->tab,sizeof(PPersonne));
L'erreur est detectée ici à l'exécution, mais la cause et probablement ailleurs.
Est-tu sûr que 'pop->tab' contient une adresse valide pour un realloc(), c'est à dire NULL ou une valeur retournée par *alloc() ?
Sinon, recherches habituelles :
- pointeurs non initialisés
- débordement de tableau...
Re: glibc detected *** realloc(): invalid next size
Citation:
Envoyé par Miksimus
Je pense que l'erreur viens de cette ligne :
Code:
pop->tab = (PPersonne*)realloc(pop->tab,sizeof(PPersonne));
Déjà, le cast est inutile.
Ensuite, difficile de savoir ce qui ne va pas sans une vue d'ensemble, mais...ce realloc() me paraît suspect.
Normalement, on utilise realloc() pour modifier la taille d'une zone précédemment allouée par malloc(), donc le dernier paramètre est en général une variable dont la valeur a été obtenue par calcul ou une expression a priori non constante.
Là, la valeur utilisée est constante.
Donc, la question que je me pose est : n'essayes-tu pas de faire un malloc() sans malloc() ?
Si oui, es-tu certain que pop->tab contient NULL au moment de l'appel ?