Pb sur realloc - C - Programmation
Marsh Posté le 05-10-2006 à 14:18:31
Quelles sont les valeurs des variables en jeu à cette étape de l'éxecution ?
(et sinon y'a une balise CODE plutot que FIXED)
Marsh Posté le 05-10-2006 à 14:31:57
yartempion a écrit : Bonjour, |
Ca te dirait pas de nettoyer et aérer un peu le code pour qu'il soit, je sais pas, lisible ?
Non parce que là, j'ai dû effectuer une recherche pour trouver le realloc()
i=++i; |
Superbe.
"++i" suffisait
buffer_RX=(unsigned char*) calloc (LG_BUFFER,1*sizeof (unsigned char)) |
et
mess_nego=calloc (mess_nego,i*sizeof (unsigned char)) |
Regarde l'utilisation de calloc(), je crois que tu te méprends sur sa façon de fonctionner.
*mess_nego=*buffer_RX; |
Pourquoi faire ?
En plus, free(mess_nego), sans mise à NULL, suivi de free(buffer_RX) va provoquer un coredump.
Et plein d'autres choses à corriger, notamment la logique de fonctionnement.
edit : j'ai perdu deux dixièmes à lire ton code
Marsh Posté le 05-10-2006 à 15:06:13
1- Tu as entierement raison j'aurais du netoyer le code.
2- J'ai vraiment un coup de barre pour avoir ecris un code pareil avec calloc.
Mais je ne comprends pas pourquoi ca passe a la compile puisque c'est n'importe quoi mon truc.
Merci beaucoup pour le coup d'oeil et j'espere que tu rattraeras les deux dixiemes.
Marsh Posté le 06-10-2006 à 10:15:26
yartempion a écrit : Mais je ne comprends pas pourquoi ca passe a la compile puisque c'est n'importe quoi mon truc. |
La compilation ne fait que vérifier la syntaxe du code plus la cohérence de la signature des fonctions avec le type des paramètres passés. A partir de là, si tu écris un truc illogique mais syntaxiquement correct, le compilo ne dira rien
Exemple: double *buf=malloc(-1 * sizeof(char)) => compilation ok (enfin ptet que "-1" il aimera pas mais "sizeof(char)" ça ne posera aucun problème)
Marsh Posté le 09-10-2006 à 13:49:21
Bonjour,
J'aifait de scorrectifs mais je perd la vleur de ma variable stockee dans mon pointeur
et au moment ou j'attribut le contenu d'un pointeur a un aiutre c'est l'adresse qui est donnee.
Voici le bout de code.
Code :
|
Je ne vois pas pourquoi je perds cette valeur.
Marsh Posté le 09-10-2006 à 13:54:47
Entre la ligne 13 et la ligne 19 je perds la valeur de mo pointeur buffer_RX et quand je demande a ce que *mess_nego=*buffer_RX
c'est mess_nego qui pointe vers l'adresse de buffer_RX. Je ne comprends pas? Pb de parantheses ou quoi.
Merci.
Marsh Posté le 09-10-2006 à 14:57:55
Ca y'est j'ai compris ce qui clochait, Je liberais trop vite la memoire du pointeur buffer_RX.
Merci A+
Marsh Posté le 05-10-2006 à 14:15:09
Bonjour,
Voici un bout de code qui compile correctement mais qui bloque quand on le lance Memory Fault(coredump).
if(FD_ISSET(socket1,&set))
{
if((buffer_RX=(unsigned char*) calloc (LG_BUFFER,1*sizeof (unsigned char)))==NULL)
printf("\nImpossible d'allouer la memoire buffer_RX pour socket1" );
nb_lu=0;
/*printf("\non passe le FDISSET de la socket" );*/
while((nb_lu=read(socket1,buffer_RX,LG_BUFFER))>0)
{
/*break;*/
printf("\nNb de carac lus sur socket %d N° caract %d",nb_lu,*buffer_RX);
/*nb_lu=write(STDOUT_FILENO,buffer_RX,nb_lu);*/
/*printf("\n Nb de crac ecris %d",nb_lu);*/
if(buffer_RX[0]==255)
{/*Un caractere IAC est arrive*/
i=1;
if((mess_nego=(unsigned char*) calloc (mess_nego,i*sizeof (unsigned char)))==NULL)
printf("\nErreur sur attribution memoire mess_nego" );
printf("\nConstruction du mess_nego" );
flag_nego_option=1;
i=++i;
*mess_nego=*buffer_RX;
/*free(buffer_RX);*/
/*printf("\ncaractere de nego option %d qui est le carctere -> %c -> 0x %02X -> %d\n",i,buffer_RX[0],(unsigned) buffer_RX[0],(unsigned) buffer_RX[0]);*/
printf("\nvaleur de mess_nego %d, valeur de buffer_RX %d adresse mess_nego=%d buffer_RX=%d",*mess_nego,*buffer_RX,mess_nego,buffer_RX);
while(flag_nego_option)
{
printf("\non est avant realloc valeur de i %d\n",i);
[b]if((mess_nego=(unsigned char*)realloc(mess_nego,i*sizeof(unsigned char)))==NULL)[/b] printf("\nErreur sur attribution memoire" );
printf("\non passe la realloc de mess_nego[i] qui est a %d",*(mess_nego+i) );
nb_lu=read(socket1,buffer_RX,LG_BUFFER);
printf("\nvaleur de mess_nego[i] = %d valeur de i=%d",*(mess_nego+i),i);
if(*(mess_nego+i)>=250 && *(mess_nego+i)<255)
{
printf("\non passe le if de *mess_nego" );
/*OPTION_NEGOCIEE(mess_nego);*/
}
flag_nego_option==0;
free(mess_nego);
printf("\nle free(mes_nego) est ok\n" );
i=++i;
} /*fin de while(flag_nego_option)*/
} /*fin de if(buffer_RX[0]==255)*/
else
{
write(STDOUT_FILENO,buffer_RX,nb_lu);
printf("\non entre dans le else" );
}
free(buffer_RX);
printf("\nle free(buffer_RX) est ok " );
if((buffer_RX=(unsigned char*) calloc (LG_BUFFER,1*sizeof (unsigned char)))==NULL)
printf("\nImpossible d'allouer la memoire buffer_RX dans while pour socket1" );
}
write(STDOUT_FILENO,buffer_RX,nb_lu);
free(buffer_RX);
}
/*printf("\n" );*/
}
Le prog bloque au moment du realloc je n'arrive pas a comprendre ce qui ce passe.