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

  FORUM HardWare.fr
  Programmation
  C++

  Probleme au niveau des classes...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme au niveau des classes...

n°682968
gizmoz
Posté le 24-03-2004 à 16:15:50  profilanswer
 

Parfoit lorsque je crée des fonctions dans mes classes jarrive avec des problemes de logique qui pourait me couter des problèmes de perte de mémoire, comme par exemple :
 
 
Dans cette fonction je veux faire un traitement avec absolument une variable dynamique non-membre et, la fonction return 0 si il y a eu un echec..
il y a des variable membre dans la classe que j'utilise dans la fonction qui sont des entier suposon... int m_Var2, m_Var3, m_Var4;
 

Code :
  1. bool ClasseBidon::FonctionBidon()
  2. {
  3. BYTE* DynVar1;
  4. //je lui donne une grosseure pour faire le traitement...
  5. DynVar1 = new BYTE[1000000];
  6. // dans le traitement j'utilise des fonction qui me return 0 s'il y a eu des erreur...
  7. m_Var2 = Fct(DynVar1);
  8. if(!m_Var2) return 0; // Echec!
  9. //je continue le traitement...
  10. m_Var3 = Fct2(DynVar1);
  11. if(!m_Var3) return 0; // Echec!
  12. m_Var4 = m_Var2 + m_Var3; // Aucun rapport... :)
  13. // Ensuite jai fini mon traitement je ferme ma variable dynamique...
  14.     delete[] DynVar1;
  15. return 1; // Succes!
  16. }


 
bon maintenant vous pouvez peut-être surment comprendre mon problème... si par exemple la fonction Fct2() retourne une erreur  
et bien je termine automatiquement ma fonction mais le problème est que ma variable dynamique est encore ouverte...
 
Comment dois-je procédé pour regler ce probleme...
 
mettre sa?
if(!)
{
 delete[] DynVar1;
 return 0;
}
pour chaque fonction qui me retourne 0 s'il y a une erreur?... je crois pas que sa marche puisque dans la réalité des fois  
j'ai beaucoup de fonction a prendre pour faire mon traitement et sa serai de la répétition de code... en-tk je peut  
me tromper mais comment je fait ou comment procédé vous dans ce jenre de cas?  

mood
Publicité
Posté le 24-03-2004 à 16:15:50  profilanswer
 

n°683003
Taz
bisounours-codeur
Posté le 24-03-2004 à 16:37:59  profilanswer
 

1) soit tu mets un delete à chaque point de sorti
2) tu utilises std::vector<BYTE> et hop son constructeur alloue comme il faut et son destructeur fait le ménage quand tu sors de ta fonction : c'est simple, t'as plus rien à faire

n°683070
gizmoz
Posté le 24-03-2004 à 17:33:33  profilanswer
 

dans le fond tu me dit dutiliser une classe pour avoir son destructeur hmmm.. pas bête comme idée
je vais assayer sa

n°683073
Taz
bisounours-codeur
Posté le 24-03-2004 à 17:34:41  profilanswer
 

non : je te dis juste qu'en C++ sécurisé, toutes les allocations mémoires sont encapsulées pour éviter les fuites (et notemment quand un exception est levée)

n°683658
snipix
Combien dites-vous ? 30 THz ?
Posté le 25-03-2004 à 11:45:15  profilanswer
 

Code :
  1. bool ClasseBidon::FonctionBidon()
  2. {
  3. BYTE* DynVar1;
  4. //je lui donne une grosseure pour faire le traitement...
  5. DynVar1 = new BYTE[1000000];
  6. // dans le traitement j'utilise des fonction qui me return 0 s'il y a eu des erreur...
  7. m_Var2 = Fct(DynVar1);
  8. if(!m_Var2) return 0; // Echec!
  9. //je continue le traitement...
  10. m_Var3 = Fct2(DynVar1);
  11. if(!m_Var3) return 0; // Echec!
  12. m_Var4 = m_Var2 + m_Var3; // Aucun rapport... :)
  13. // Ensuite jai fini mon traitement je ferme ma variable dynamique...
  14.     delete[] DynVar1;
  15. return 1; // Succes!
  16. }


 
 

Code :
  1. bool ClasseBidon::FonctionBidon()
  2. {
  3.         bool bRet = false;
  4. BYTE* DynVar1 = new BYTE[1000000];
  5. m_Var2 = Fct(DynVar1);
  6. if(m_Var2)
  7. {
  8.  m_Var3 = Fct2(DynVar1);
  9.  if(m_Var3)
  10.  {
  11.   m_Var4 = m_Var2 + m_Var3; // Aucun rapport... :)
  12.   bRet = true;
  13.  }
  14. }
  15. delete[] DynVar1;
  16. return bRet;
  17. }


 
C'est quand meme mieux comme ca non ???


Message édité par snipix le 25-03-2004 à 11:46:57
n°683670
Taz
bisounours-codeur
Posté le 25-03-2004 à 12:06:01  profilanswer
 

non. pourquoi tu ne fais pas ce que je te dit
 
 

Code :
  1. bool ClasseBidon::FonctionBidon()
  2.   {
  3.      std::vector<BYTE> DynVar1(1000000);
  4.    
  5.      // dans le traitement j'utilise des fonction qui me return 0 s'il y a eu des erreur...
  6.      m_Var2 = Fct(&DynVar1[0]);
  7.      if(!m_Var2) return false;
  8.        
  9.      //je continue le traitement...
  10.      m_Var3 = Fct2(&DynVar1[0]);
  11.      if(!m_Var3) return false; // Echec!
  12.      
  13.      m_Var4 = m_Var2 + m_Var3; // Aucun rapport... :)
  14.    
  15.      // Ensuite jai fini mon traitement je ferme ma variable dynamique...
  16.  
  17.      return true; // Succes!
  18.   }


 
le truc c'est qu'un vecteur est alloué de manière contigu. donc sous réserve que tu ne redimensionnes pas ton vecteur &v[0] te donne un pointeur comme si tu manipulé un tableau classique.

n°683673
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 25-03-2004 à 12:17:35  profilanswer
 

pourquoi si peu de monde utilise la STL :o
C'est quand meme 'achement utile :D


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

  Probleme au niveau des classes...

 

Sujets relatifs
Problème de connection à une base de données Oracle[C]problème read sur port série
probleme de sessions...[php] probleme upload fichier par formulaire
[ASP.NET] problème posting d'un formProbleme de broken pipe
[java] Probleme avec la classe AuthenticatorProblème de "static "
Probleme avec SDLprobleme librairie activeX tapi
Plus de sujets relatifs à : Probleme au niveau des classes...


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