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

  FORUM HardWare.fr
  Programmation
  C

  [C] Purify me dit ca...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Purify me dit ca...

n°706371
ben33
Posté le 22-04-2004 à 19:31:29  profilanswer
 

[W] UMR: Uninitialized memory read in strcmp {4 occurrences}
 
 
        s= (char*)malloc(10240);
        for (c=' ';c!='>'&&!feof(fd);c=s[i]=NEXTC(fd),i++) {
            s[i+1]=0;
 =>         if (0==strcmp("![CDATA[",s)) {
                for (;!feof(fd)&&(strcmp("]]>",&s[i-3]));s[i]=NEXTC(fd),i++,s[i]=0);
                i--; // For >
                s[i]=0;
 
C'est grave docteur..?


Message édité par ben33 le 22-04-2004 à 19:32:53
mood
Publicité
Posté le 22-04-2004 à 19:31:29  profilanswer
 

n°706378
Taz
bisounours-codeur
Posté le 22-04-2004 à 19:40:01  profilanswer
 

- mauvaise utilisation de feof
- le message est explicite ... ou alors utilise calloc au lieu de malloc

n°706412
ben33
Posté le 22-04-2004 à 20:34:01  profilanswer
 

Explicite certes.mais je ne comprends pas pourquoi.. c pour ca que je pose la question!
 
QU'entends tu par mauvaise utilisation de feof?

n°706418
Taz
bisounours-codeur
Posté le 22-04-2004 à 20:47:45  profilanswer
 

pour eof, tu fais une recherche sur le forum ou tu lis ta documentation.
 
tu comprends pas pourquoi ? y a quoi sur ce que pointe s lors du premier appel à strcmp ?

n°706426
christophe​_d13
L'efficacité à tout prix.
Posté le 22-04-2004 à 21:04:49  profilanswer
 

for (;!feof(fd)&&(strcmp("]]>",&s[i-3]));s[i]=NEXTC(fd),i++,s[i]=0);
 
&s[i-3] Il y a altération du pointeur ici... Ainsi l'emplacement de la mémoire est modifiée brutalement... Il est perdue et pointe sur une zone non allouée !


Message édité par christophe_d13 le 22-04-2004 à 21:06:44
n°706430
ben33
Posté le 22-04-2004 à 21:07:49  profilanswer
 

ah... je n'avais pas pensé a ca..
Mais pourquoi Purify me pointe la ligne du dessus alors..?
Et tu resoudrais ca comment ..?

n°706433
christophe​_d13
L'efficacité à tout prix.
Posté le 22-04-2004 à 21:13:22  profilanswer
 

Citation :

Mais pourquoi Purify me pointe la ligne du dessus alors..?


Car strcmp accède à la mémoire via un pointeur erroné !

Citation :

Et tu resoudrais ca comment ..?


En enlevant le & gros béta !

n°706436
Taz
bisounours-codeur
Posté le 22-04-2004 à 21:17:43  profilanswer
 

christophe_d13 a écrit :

Citation :

Mais pourquoi Purify me pointe la ligne du dessus alors..?


Car strcmp accède à la mémoire via un pointeur erroné !

Citation :

Et tu resoudrais ca comment ..?


En enlevant le & gros béta !
 

non, tu racontes n'importe quoi
 
&s[i-3] permet de traiter la sous-chaine pointée par s commença au caractère i-3. il faut que i soit > 3 certes, sinon, il n'y aucun problème

n°706437
Taz
bisounours-codeur
Posté le 22-04-2004 à 21:20:27  profilanswer
 

=>         if (0==strcmp("![CDATA[",s)) {  
 
la zone pointée pas s n'est pas initializée, résultat, strcmp risque de partir dans le décor ... il va chercher un '\0' finale et peut être ne pas en trouver. il y a n'importe quoi dans s.
 
2 solutions :
- allouer avec calloc qui mets dez '\0' partout
  calloc(10240, 1)
- allouer avec malloc et bien marquer la chaine comme vide
  s = malloc(10240); s[0] = '\0';

n°706438
Taz
bisounours-codeur
Posté le 22-04-2004 à 21:22:00  profilanswer
 

christophe_d13 a écrit :

for (;!feof(fd)&&(strcmp("]]>",&s[i-3]));s[i]=NEXTC(fd),i++,s[i]=0);
 
&s[i-3] Il y a altération du pointeur ici...


 
ça veut rien dire ça d'ailleurs.

christophe_d13 a écrit :


Ainsi l'emplacement de la mémoire est modifiée brutalement... Il est perdue et pointe sur une zone non allouée !

faux. s garde sa valeur, la zone pointée par s est modifiée, c'est bien le but du programme. le tout est de maitrisé ce processus

mood
Publicité
Posté le 22-04-2004 à 21:22:00  profilanswer
 

n°706439
christophe​_d13
L'efficacité à tout prix.
Posté le 22-04-2004 à 21:22:43  profilanswer
 

Oups la méga bourde... dsl.
Pour la réponse, taz, tu es dans le juste...
 
Méga faux christophe, méga faux... Promis, la prochaine je ne lirais plus en diagonale...
 
Nan, pas tapé !

n°706440
skelter
Posté le 22-04-2004 à 21:24:01  profilanswer
 

mais ta qd meme ecrit "&s[i-3] Il y a altération du pointeur ici"
 
c'est parce que t'ecrit en diagonal ?

n°706441
Taz
bisounours-codeur
Posté le 22-04-2004 à 21:24:26  profilanswer
 

christophe_d13 a écrit :

Promis, la prochaine je ne lirais plus en diagonale...

y a pas de diagonale qui vaille, si s est un pointeur &s[i-3] <=> s + i - 3 est aussi pointeur. donc valide au niveau du typage.

n°706443
skelter
Posté le 22-04-2004 à 21:27:18  profilanswer
 

de meme &(i-3)[s]


Message édité par skelter le 22-04-2004 à 21:28:53
n°706445
ben33
Posté le 22-04-2004 à 21:29:37  profilanswer
 

Merci Taz...
En plus c tres didactique.. J'apprécie!
 
Edit : Ne vous "battez" pas tout de meme... :)
Merci de me faire progresser!
Allons tester... puis allons au pb suivant...


Message édité par ben33 le 22-04-2004 à 21:40:37
n°706446
ben33
Posté le 22-04-2004 à 21:30:02  profilanswer
 

Merci a toi christophe_d13 aussi..
Ca arrive a tt le monde de se tromper!

n°706450
christophe​_d13
L'efficacité à tout prix.
Posté le 22-04-2004 à 21:46:22  profilanswer
 

ben33> Ouais ben se tromper comme ça c'est de l'abomination !

n°706484
darkoli
Le Petit Dinosaure Bleu
Posté le 22-04-2004 à 22:44:14  profilanswer
 

ben33 a écrit :

...
for (;!feof(fd)&&(strcmp("]]>",&s[i-3]));s[i]=NEXTC(fd),i++,s[i]=0);
...


Pourquoi faire du code aussi compact, c'est pas évident à relire. :pt1cable:  
 

n°706488
Taz
bisounours-codeur
Posté le 22-04-2004 à 22:47:00  profilanswer
 

tant qu'il est mauvais, ça na pas d'infortance
 
 
s[i]=NEXTC(fd),i++,s[i]=0
 
ok, utilise calloc alors si tout doit être à zéro

n°706647
ben33
Posté le 23-04-2004 à 06:57:02  profilanswer
 

Taz> 'tant qu'il est mauvais, ça na pas d'infortance '
T'entends quoi par la?

n°706649
Taz
bisounours-codeur
Posté le 23-04-2004 à 07:12:43  profilanswer
 

que ton code est mauvais à cause des mauvais usage de feof, de toutes ces mises à zéro que tu peux remplacer par un seul calloc, de l'absence du gestion de débordement (si ton fichier fait 1 octet de plus boom), ton i fait le yoyo, c'est quasiment sur que tantot il est négatif, tantot > 10240

mood
Publicité
Posté le   profilanswer
 


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

  [C] Purify me dit ca...

 

Sujets relatifs
Rational PurifyPurify de *****
Plus de sujets relatifs à : [C] Purify me dit ca...


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