Probleme de memoire lors de la lecture d'une socket
bonjour,
J'ai fais un sous programme qui peut récupérer des requètes de longueur quelconque en lisant sur une socket.
Pour cela j'ai un buffer qui stoke des données de la socket et les réinjecte dans une plus chaine de caractère(requete) qui est réallouée a chaque fois qu'un nouveau buffer désire stoker de nouveaux caractères. Requete contient donc toute ma requete normalement.
Mon problème est que ce sous-programme fonctionne parfaitement lors de son premier appel. Mais lors de son second appel il fait segmentation fault/ou erreur de bus(sous solaris) sur le réalloc et fait realloc(): invalid next size sous mandriva. Je ne comprend pas bien ces erreurs, les paramètre passé dans le réalloc son bon (taille_req = 64 et requete n'est pas null)je ne trouve pas mon bug.
Je joins mon code si quelqu'un jette un oeil.
Merci d'avance
Arnaud
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
|
char * lire_socket(int nsock) {
int taille_req = TAILLE_BUFF;
int retour = TAILLE_BUFF;
char* requete = NULL;
char buffer[TAILLE_BUFF];
requete = malloc( TAILLE_BUFF* sizeof(char));
bzero(requete,TAILLE_BUFF * sizeof(char));
bzero(buffer, TAILLE_BUFF * sizeof(char));
retour = read(nsock, buffer, TAILLE_BUFF);
strncat(requete, buffer, retour);
/* Boucle de lecture */
while((retour == TAILLE_BUFF)) {
bzero(buffer, TAILLE_BUFF * sizeof(char));
retour = read(nsock, &buffer[0], TAILLE_BUFF);
taille_req = taille_req + retour;
printf("taille = %i\n", taille_req);
/*printf("requete = %s\n",requete);*/
printf("flag\n");
requete = realloc(requete, taille_req * sizeof(char));
printf("flag1\n");
strncat(requete, buffer, retour);
printf("flag2\n");
}
/*printf("requete lue = %s\n",requete); */
return(requete);
} |