Bonjour, j’ai un petit problème lors d’une gestion d’une table des symboles dynamique.
J’initialise une table à N valeurs et si on veut introduire une valeur supplémentaire, on fait un realloc pour agrandir la taille du tableau.
Jusque là rien de compliqué.
Ma table des symboles est une table d’une structure stokant un int, un char* et un void* et lors du realloc, les premieres valeurs de ma table sont écrasées, comme par magie. Je sais que la magie n’existe pas en info alors j’aimerai qu’on m’explique.
Je vous fournis un code d’exemple:
[cpp]#include <stdlib.h>
#include <stdio.h>
typedef struct symbole symbole;
struct symbole
{
int type;
char *s;
void *x;
};
int size=5;
int util=0;
void ajout(symbole tab, int val)
{
symbole a;
a.type=val;
a.s=(char)malloc(sizeof(char));
a.s[0]=(char)val;
if (util>=size)
{
printf("Taille trop petite, realloc\n");
realloc(tab,(size+5)*sizeof(symbole));
size+=5;
}
tab[util]=a;
util++;
}
void display(symbole *tab)
{
int i;
printf("[");
for (i=0;i<util;i++)printf("|%d",tab[i].type);
printf("]\n");
}
main()
{
srand(time(NULL));
int c,r;
symbole tab=(symbole)malloc(6*sizeof(symbole));
while (1)
{
r=rand()%100;
ajout (tab,r);
display(tab);
usleep(500000);
}
}[/cpp]
Et ce programme me donne cette execution:
[fixed]
[|47]
[|47|73]
[|47|73|39]
[|47|73|39|10]
[|47|73|39|10|31]
Taille trop petite, realloc
[|1075137020|73|39|10|31|45] <-là la valeur 47 a été remplacée par 1075…
[|1075137090|65|39|10|31|45|66]
[|1075137090|17|39|1075137020|31|45|48|15]
[|1075137090|17|39|1075137020|1075137020|45|32|15|36]
[|1075137090|17|39|1075137020|1075137073|17|16|15|36|49]
Taille trop petite, realloc
[|0|17|39|1075137020|1075137073|17|16|15|36|49|18]
[/fixed]
Merci