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

  FORUM HardWare.fr
  Programmation
  C

  memcmp ??

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

memcmp ??

n°621951
weblook$$
Posté le 26-01-2004 à 15:30:09  profilanswer
 

Code :
  1. typedef struct
  2. {
  3.    char str[50];
  4.    int type;
  5. }CI,*RefCI;


 
pourquoi les deux codes suivants ne sont pas identiques.
Dans le premier code, la fonction memcmp renvoie bien 0.Mais pas dans le deuxième code.why ???
 
code 1:  
 

Code :
  1. int main(int argc,char** argv)
  2. {
  3. RefCI c;
  4. RefCI cc;
  5. c=(RefCI)malloc(sizeof(CI));
  6. strcpy(c->str,"tintin" );
  7. c->type=3;
  8. cc=(RefCI)malloc(sizeof(CI));
  9. strcpy(cc->str,"tintin" );
  10. cc->type=3;
  11. if(!memcmp((RefCI)c,(RefCI)cc,sizeof(CI)))
  12.  printf("Egale\n" );
  13. else
  14.  printf("Different\n" );
  15.    
  16. free(cc);
  17. free(c);
  18. return 0;
  19. }


 
code 2: ( à priori équivalent)
 

Code :
  1. int main(int argc,char** argv)
  2. {
  3. CI c;
  4. RefCI cc;
  5. strcpy(c.str,"chaine bidon" );
  6. c.type=3;
  7. cc=(RefCI)malloc(sizeof(CI));
  8. strcpy(cc->str,"chaine bidon" );
  9. cc->type=3;
  10. if(!memcmp((RefCI)&c,(RefCI)cc,sizeof(CI)))
  11.  printf("Egale\n" );
  12. else
  13.  printf("Different\n" );
  14.    
  15. free(cc);
  16. return 0;
  17. }


 
 :??:

mood
Publicité
Posté le 26-01-2004 à 15:30:09  profilanswer
 

n°621967
Kristoph
Posté le 26-01-2004 à 15:47:11  profilanswer
 

:sarcastic:
 
Tu as verifié si la mémoire que tu lisais avec memcmp est initialisée correctement ? Si tu est sous Linux, essaye de passer ton code à Valgrind tu veras, tu aprendras plein de choses.


Message édité par Kristoph le 26-01-2004 à 15:49:14
n°621987
gilou
Modosaurus Rex
Posté le 26-01-2004 à 15:59:23  profilanswer
 

Un petit coup de dump memory montre tout de suite pourquoi la comparaison n'est pas la meme: apres tes allocations memoires, il y a n'importe quoi dans les chaines allouées, tant que tu n'as pas fait le strcpy, et ensuite, il y a n'importe quoi entre le \0 de fin de chaine et le dernier octet du tableau non rempli.
 
A priori, les 2 tests pourraient donc repondre different. Si ca le fait pas au premier (et la fait au second), c'est que tu es probablement an mode debug, et que ton allocateur memoire doit remplir ce que tu alloues avec une chaine caracteristique, pour verifier des pbs de depassement... Tu utilises le meme allocateur ==> meme octet de remplissage. C'est pas le cas dans le second cas.
Mais a la base, si le premier test repond Egal, c'est a cause d'un effet de bord, donc.
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°622002
Taz
bisounours-codeur
Posté le 26-01-2004 à 16:04:08  profilanswer
 

bref joue également avec memset et calloc

n°622037
gilou
Modosaurus Rex
Posté le 26-01-2004 à 16:22:49  profilanswer
 

J'ai l'impression qu'il cherche en fait a faire l'analogue pour l'operateur de comparaison du deep_copy pour l'opérateur de copie...
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°622115
weblook$$
Posté le 26-01-2004 à 17:57:55  profilanswer
 

gilou a écrit :

Un petit coup de dump memory montre tout de suite pourquoi la comparaison n'est pas la meme: apres tes allocations memoires, il y a n'importe quoi dans les chaines allouées, tant que tu n'as pas fait le strcpy, et ensuite, il y a n'importe quoi entre le \0 de fin de chaine et le dernier octet du tableau non rempli.
 
A priori, les 2 tests pourraient donc repondre different. Si ca le fait pas au premier (et la fait au second), c'est que tu es probablement an mode debug, et que ton allocateur memoire doit remplir ce que tu alloues avec une chaine caracteristique, pour verifier des pbs de depassement... Tu utilises le meme allocateur ==> meme octet de remplissage. C'est pas le cas dans le second cas.
Mais a la base, si le premier test repond Egal, c'est a cause d'un effet de bord, donc.
A+,


 
 
arff oui, bien vu. merci monsieur  :jap:

n°622122
weblook$$
Posté le 26-01-2004 à 18:03:54  profilanswer
 

Taz a écrit :

bref joue également avec memset et calloc


 
yes  ;)


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

  memcmp ??

 

Sujets relatifs
[C++] Comment utiliser les fonctions memcmp ??? 
Plus de sujets relatifs à : memcmp ??


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)