Bonjour à tous,
Désolé de déranger pendant les périodes de vacances de noel, mais les erreurs C ne prennent pas de vacances !
Je travaille sur un projet qui doit lire un fichier XML pour sa configuration. De ce coté là, pas de problème, mais ... je ne sais pas d'avance combien de structure du type
<client>
<id>IDENTIFIANT</id>
<ip>@IP</ip>
</client>
peuvent se trouver dans ce fichier de configuration, et je passe donc par un realloc pour gérer cela de façon dynamique.
Le gros problème, c'est que la LibC GNU n'est pas contente, elle m'insulte avec un classique "invalid next size".
Pour simplifier le code et juste résoudre le problème, j'ai écrit cela :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
typedef struct client{
char ip[32];
char id[128];
} client;
int main(int argc, char **argv) {
client **test;
client **temp;
int i = 0;
int orig = 2;
int new = orig*2;
test = (client **) malloc(sizeof(client *)*orig);
for(i=0;i<orig;i++){
test = (client *)malloc(sizeof(client));
}
fprintf(stdout,"Reallocation de %i vers %i :\n\n",orig,new);
int u = 0;
while(u++<5){
strcpy(test[0]->ip,"TEST");
fprintf(stdout,"TEST(0) == %s\n",test[0]->ip);
if((temp = realloc(test,sizeof(client *)*new)) == NULL){
fprintf(stderr,"Erreur avec le realloc : %s\n",strerror(errno));
return(-1);
}
test = temp;
fprintf(stdout,"REALLOC EFFECTUE :: TEST(0) == %s\n",test[0]->ip);
new = orig*2;
for(i=orig;i<new;i++){
test = (client *)malloc(sizeof(client));
orig = new;
}
strcpy(test[1]->ip,"TEST2");
}
fprintf(stdout,"TEST(1) == %s\n",test[1]->ip);
fprintf(stdout,"TEST(0) == %s\n",test[0]->ip);
i=0;
while(*test!=NULL){
fprintf(stdout,"%i => %s\n",++i,(*test)->ip);
test++;
}
return (0);
}
Ce code ne sert vraiment à rien, ormis allouer de la mémoire, mais il met en pratique ce que je dois faire : faire une boucle de reallocation de mémoire.
J'ai en vain essayé de passer par des client*** comme j'avais pu le voir sur d'autres forum :
Exemple :
client **tableau;
client ***temp = realloc(&tableau,NEW_SIZE);
[...] // TESTS
tableau = *temp;
Je commence à être désespéré, please HELP !!
Merci d'avance et bonnes fêtes à tous