Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
885 connectés 

  FORUM HardWare.fr
  Programmation
  C

  problemme sur realloc

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problemme sur realloc

n°1927026
yartempion
Posté le 27-09-2009 à 11:11:37  profilanswer
 

Bonjour,
Voici un bout de code:

Code :
  1. int Ident_Modif(pos_mem3,ProxyId2,FluxId2)
  2. {
  3. char *Modification,*temp_Modification,*Modif;
  4. int resultat3, Ident_ACL;
  5. printf("\nRecherche type modif pos_mem3" );
  6. sleep(2);
  7.  
  8. if((Modification=(char*)calloc (13,sizeof(char*)))==NULL)  
  9.  {
  10.  perror("\nErreur sur allocation de memoire tampon" );
  11.  exit(4);
  12.  }
  13. else
  14. memset(*Modification,0,strlen(Modification));
  15. printf("\navant la boucle" );
  16. do
  17. {
  18.  if((resultat3=fread(Modification,sizeof (char),12,Instructions))<12)
  19.  perror("\nErreur de lecture de l'opération du flux a traiter" );
  20.  pos_mem3++;
  21.  fseek(Instructions,pos_mem3,SEEK_SET);
  22. }while((strcmp(Modification,"modification" )));
  23.  
  24. printf("\nType de Modification : %s",Modification);
  25. pos_mem3=pos_mem3+strlen(Modification);
  26. /*fseek(Instructions,pos_mem3+strlen(Modification),SEEK_SET);*/
  27. printf("\nAprés le fseek" );
  28. if((Modification=(char*)calloc (2,sizeof(char*)))==NULL)  
  29.  {
  30.  perror("\nErreur sur allocation de memoire tampon" );
  31.  exit(4);
  32.  }
  33. else memset(*Modification,0,strlen(Modification));
  34. printf("\ntoujours ok" );
  35.  if((temp_Modification=(char*)calloc (2,sizeof(char*)))==NULL)  
  36.  {
  37.  perror("\nErreur sur allocation de temp_Modification" );
  38.  exit(4);
  39.  }
  40. else memset(*temp_Modification,0,strlen(Modification));
  41. if((Modif=(char*)calloc (2,sizeof(char*)))==NULL)  
  42.  {
  43.  perror("\nErreur sur allocation de Modif" );
  44.  exit(4);
  45.  }
  46. memset(*Modif,0,strlen(Modif));
  47. printf("\ntoujours ok" );
  48. do
  49. {
  50. fseek(Instructions,pos_mem3,SEEK_SET);
  51.   /*printf("\ndans la boucle do" );*/
  52. if((resultat3=fread(Modif,1,sizeof(char),Instructions))<1)
  53.  perror("\nErreur de lecture du type de modif" );
  54.  printf("\napres le read valeur %c %d",*Modif,*Modif);
  55.  if(isalpha(*Modif))
  56.  {
  57.  printf("\ndans le if" );
  58.  strcat(Modification,Modif);
  59.   printf("\napres le strcat valeur Modif %c Modification %s taille Modification %d",*Modif,*Modification,strlen(Modification));
  60.   if(temp_Modification=realloc(Modification,(strlen(Modification)+10)*sizeof(char))==NULL)
  61.   perror("\nErreur sur reallocation memoire Modification" );
  62.   printf("\napres realloc taille %d %d",strlen(Modification),strlen(temp_Modification));
  63.   if(Modification=realloc(temp_Modification,(strlen(temp_Modification)+1)*sizeof(char))==NULL)
  64.   perror("\nErreur sur reallocation memoire Modification" );
  65.   printf("\napres passage taille %d %d",strlen(Modification),strlen(temp_Modification));
  66.  }
  67.  pos_mem3++;
  68.  printf("\nreboclage Modification = %s Modif= %d pos_mem3 %d\n",*Modification,*Modif,pos_mem3);
  69.  sleep(2);
  70. }while(*Modif!=10);
  71.  printf("\noperation: %s\n",*Modification);
  72.  free(Modification);
  73.  free(temp_Modification);
  74.  free(Modif);
  75. return(pos_mem3+strlen(Modification));
  76. }

 

et voici le resultat avant la creation du fichier core:

 

Recherche type modif pos_mem3
avant la boucle
Type de Modification : modification
Aprés le fseek
toujours ok
toujours ok
apres le read valeur : 58
reboclage Modification =  Modif= 58 pos_mem3 143

 

apres le read valeur   32
reboclage Modification =  Modif= 32 pos_mem3 144

 

apres le read valeur s 115
dans le if
apres le strcat valeur Modif s Modification  taille Modification 1
apres realloc taille 1 0
apres passage taille 0 0
reboclage Modification =  Modif= 115 pos_mem3 145

 

apres le read valeur u 117
dans le ifBus error(coredump)

 

Pourquoi la fonction realloc ne recopie t'elle pas le contenu d une memoire a l'autre?
Merci

Message cité 1 fois
Message édité par gilou le 27-09-2009 à 19:00:12
mood
Publicité
Posté le 27-09-2009 à 11:11:37  profilanswer
 

n°1927154
Sve@r
Posté le 27-09-2009 à 23:06:54  profilanswer
 

yartempion a écrit :

Bonjour,
Voici un bout de code:

Code :
  1. int Ident_Modif(pos_mem3,ProxyId2,FluxId2)
  2. {
  3. char *Modification,*temp_Modification,*Modif;
  4. int resultat3, Ident_ACL;
  5. printf("\nRecherche type modif pos_mem3" );
  6. sleep(2);
  7.  
  8. if((Modification=(char*)calloc (13,sizeof(char*)))==NULL)  
  9.  {
  10.  perror("\nErreur sur allocation de memoire tampon" );
  11.  exit(4);
  12.  }
  13. else
  14. memset(*Modification,0,strlen(Modification));



Je ne vais même pas plus loin. Tu alloues 13 pointeurs dans une zone prévue pour recevoir des caractères. Et en plus tu utilises strlen() sur une zone qui n'est pas forcément une chaine (même si ça ne gêne pas trop puisque le calloc l'a remplie de zéros). D'ailleurs, le memset est inutile puisque justement calloc a rempli ta zone de zéros.
 
Avec ça, inutile de réfléchir sur les autres problèmes de ton code (dont realloc fait partie).


Message édité par Sve@r le 27-09-2009 à 23:08:11

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  problemme sur realloc

 

Sujets relatifs
problemme de stylemalloc,calloc,realloc,free
Problemme sur fonction [debutant]Pb sur realloc
realloc d'un tableau plus petitTableau 2 entrées problemme borland
Problemme php, bddd ... pour news :¤)Probleme étrange avec realloc ...
aide sur le realloc 
Plus de sujets relatifs à : problemme sur realloc


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR