Purify de *****

Purify de ***** - C++ - Programmation

Marsh Posté le 04-07-2002 à 11:26:40    

Hummm, j'ai un ch'ti probleme avec purify.
En gros j'ai une structure avec toutes les variables bien initialisees (memset powered).
Ensuite je construit une liste de pointeur vers differents elements ayant la structure en question.
Le probleme c'est quand je teste un des elements de la structure ( on va dire structure->printed), je me mange un joli UMR :mad:
apres passage au debuggeur, la structure est pourtant bien comme il faut, et y a pas de garbage dans le champ.
C'est possible que purify se prenne les pieds dans le tapis ? (et comment faire pour qu'il ne me fasse plus chier :mad:)
 

Reply

Marsh Posté le 04-07-2002 à 11:26:40   

Reply

Marsh Posté le 04-07-2002 à 11:31:14    

en gros je fais  
 
    while(in_list) {
      port = (hvo_port_t *)in_list->pointer;
      if (port->printed == 1)
 
c'est le if qui me balance un UMR.
Paradoxalement plus loin j'ai if (port->index == -1) et y a pas d'UMR :/

Reply

Marsh Posté le 04-07-2002 à 11:33:28    

c'est quoi un UMR ??
U???????? Memory Resource non ?

Reply

Marsh Posté le 04-07-2002 à 11:37:29    

Uninitialize Memory Read

Reply

Marsh Posté le 04-07-2002 à 11:39:56    

joce a écrit a écrit :

Uninitialize Memory Read



le genre de truc qui apparait avec un pointeur nul c'est ca ?
 
t'a essayé avec diverses compilateurs ?

Reply

Marsh Posté le 04-07-2002 à 11:49:13    

non si c'etait un pointeur nul ca causerait pas de probleme.
C'est juste purify considere que j'ai pas initialise le contenu du pointeur que je lis, et donc qu'il peut y avoir nawak dedans.
Or il est bien initialise normalement :/
Pour le compilo j'ai pas trop le choix, on compile sous Solaris avec Forte au taf (au moins sur les OS 5.7)

Reply

Marsh Posté le 04-07-2002 à 12:41:52    

Reply

Marsh Posté le 04-07-2002 à 12:52:10    

Ton pointeur pointe bien vers qq chose ?
(Quand au debugger souvent ss delphi il dit que ya s'qui fo alors qu'en réalité....)


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 04-07-2002 à 12:54:52    

[SDF]Poire a écrit a écrit :

Ton pointeur pointe bien vers qq chose ?
(Quand au debugger souvent ss delphi il dit que ya s'qui fo alors qu'en réalité....)




ba oui la structure port est ok, et j'ai partout initialisé la structure juste après l'allocation mémoire.
C'est ca qui me trou le cul :/


---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

Marsh Posté le 04-07-2002 à 13:19:49    

Un chtit bout de code ou C top secret ?


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 04-07-2002 à 13:19:49   

Reply

Marsh Posté le 04-07-2002 à 13:26:58    

[SDF]Poire a écrit a écrit :

Un chtit bout de code ou C top secret ?




Confidentiel.
 
ceci grosso merdo :
 

Code :
  1. module->ports = (hvo_port_t *)util_alloc_memory(count*sizeof(hvo_port_t)); // allocation via le pool de mémoire
  2. memset((void *) module->ports,0 ,count*sizeof(hvo_port_t))
  3. ensuite :
  4. port = module->ports;
  5. while(i<module->nport) { // module->nport c'est le nombre de port
  6.    util_add_pointer(&in_list,port, (int*) port); // rajout du port dans la liste de pointeur
  7.    port++;
  8. }
  9. while(in_list) {
  10.   port = (hvo_port_t *)in_list->pointer;
  11.   if (port->printed == 1) { // UMR de MAIRDE
  12.     [...]
  13.   }
  14.   in_list=in_list->next;
  15. }


Message édité par joce le 04-07-2002 à 13:27:51

---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

Marsh Posté le 04-07-2002 à 13:44:09    

Juste comme ça... (C ptet une connerie.... ça fait longtemps que G pas fait de C++ et G pas vraiment pratiqué...)
memset((void *) module->ports,0 ,count*sizeof(hvo_port_t))
 
à la place du -> C pas un . qu'il fo ?
 
(suis ptet à côté de mes pompes hein  :pt1cable: )


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 04-07-2002 à 13:45:18    

[SDF]Poire a écrit a écrit :

Juste comme ça... (C ptet une connerie.... ça fait longtemps que G pas fait de C++ et G pas vraiment pratiqué...)
memset((void *) module->ports,0 ,count*sizeof(hvo_port_t))
 
à la place du -> C pas un . qu'il fo ?
 
(suis ptet à côté de mes pompes hein  :pt1cable: )




hum normalement non (sinon je fais foutre l'adresse de ports à 0 + les adresses qui suivent d'une longueur de count*sizeof(hvo_port_t) je vais joliment écraser des zones mémoires à la bourrin :D).
De toute façon j'ai initialisé à part dans une boucle module->ports->printed pour chaque port, et c'est pareil :/


Message édité par joce le 04-07-2002 à 13:46:57

---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

Marsh Posté le 04-07-2002 à 13:46:33    

Oué...
Beh bonne chance  :D  
 :hello:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 04-07-2002 à 14:16:50    

Bon finalement j'ai fait :
 

Code :
  1. while(i<module->nport) {// module->nport c'est le nombre de port  
  2. port->printed = 0;
  3. util_add_pointer(&in_list,port, (int*) port);// rajout du port dans la liste de pointeur  
  4. port++;                                                       
  5. }


et c'est bon
m'enfin c'est zarbe...

Reply

Marsh Posté le 05-07-2002 à 02:21:23    

Purify, c'est un utilitaire qui vérifie la cohérence du code ?
 
Alors, il ne fait pas le lien entre memset et l'initialisation des champs de la structure.
Ca se comprend.
 
Essaye:

Code :
  1. struct Truc{
  2. /*...*/
  3. } Truc0={0}; //Comme les tableaux, tous les membres à 0.
  4. int main(){
  5. Truc Var2;
  6. Var2=Truc0; //
  7. }


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 05-07-2002 à 08:09:52    

musaran a écrit a écrit :

Purify, c'est un utilitaire qui vérifie la cohérence du code ?
 
Alors, il ne fait pas le lien entre memset et l'initialisation des champs de la structure.
Ca se comprend.
 
Essaye:

Code :
  1. struct Truc{
  2. /*...*/
  3. } Truc0={0}; //Comme les tableaux, tous les membres à 0.
  4. int main(){
  5. Truc Var2;
  6. Var2=Truc0; //
  7. }






Purify vérifie qu'il y a pas de problème d'accès en mémoire, d'allocation foireuse, de lecture non initialisé etc.
M'enfin le problème était zarbe.


---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

Marsh Posté le 05-07-2002 à 20:52:04    

c'est pas grave les UMR
si tu veux tous les corriger en général tu y passerais des années.
les ABW ou les FMW ca c'est grave, il faut corriger

Reply

Marsh Posté le 09-07-2002 à 18:14:56    

Oualb a écrit a écrit :

c'est pas grave les UMR
si tu veux tous les corriger en général tu y passerais des années.
les ABW ou les FMW ca c'est grave, il faut corriger



heu je considère qu'UMR c'est grâve désolé, surtout quand tu testes si le champ == NULL ou pas.
Y a pas un seul UMR dans l'appli :na:


---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed