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

  FORUM HardWare.fr
  Programmation
  C++

  valeur de retour d'un new ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

valeur de retour d'un new ?

n°228639
hellbilly
free smile
Posté le 16-10-2002 à 12:28:28  profilanswer
 


Jusqu'à présent je testais toujours le retour d'un new avec NULL pour voir si l'allocation a réussi. Mais je viens de lire que ca ne servait a rien car si l'allocation echoue une exception est lancee et la valeur de retour de new n'etait pas initialisée à NULL. C'est ce que dit apparemment la norme du C++. Mais dans tous les cours que j'ai lus soit new est testé avec NULL sans explication soit il est dit que la majorité des compilos le font donc pas de probleme.
De plus, dans la MSDN il est dit que new retourne NULL en cas d'echec ce qui me va pour le moment car j'utilise principalement VC++. Mais bon le jour ou je change de compilo ou de systeme je voudrais pas devoir tout modifier.
Donc, je peux continuer à tester avec NULL sans problème ou faut gerer l'exception ?
 
Merci.
 

mood
Publicité
Posté le 16-10-2002 à 12:28:28  profilanswer
 

n°228644
leneuf22
Posté le 16-10-2002 à 12:36:25  profilanswer
 

Bah si new ne te retourne pas d'adresse valide, c'est qu'il te retourne 0x00000000 (donc c'est NULL)
Il ne peut pas te retourner autre chose.
 
Maintenant il y a surement plusieurs façons de détecter un bug, mais si assert te convient, alors ne change pas :)

n°228647
hellbilly
free smile
Posté le 16-10-2002 à 12:46:20  profilanswer
 

leneuf22 a écrit a écrit :

Bah si new ne te retourne pas d'adresse valide, c'est qu'il te retourne 0x00000000 (donc c'est NULL)
Il ne peut pas te retourner autre chose.
 
Maintenant il y a surement plusieurs façons de détecter un bug, mais si assert te convient, alors ne change pas :)




 

Citation :


[16.5] Doit-on vérifier que p n'est pas NULL après un p = new Fred()?  
Non! (Mais si vous avez un vieux compilateur, vous devrez peut-être forcer le compilateur à se comporter ainsi).
 
Il est vraiment galère d'avoir à tester explicitement le pointeur NULL après chaque allocation par new. Devoir écrire du code comme celui ci-dessous est plutôt pénible:
 
    Fred* p = new Fred();
    if (p == NULL)
      throw bad_alloc();
 
Et c'est encore plus pénible si votre compilateur ne supporte pas les exceptions (ou si vous ne voulez pas les utiliser):
 
    Fred* p = new Fred();
    if (p == NULL) {
      cerr << "Couldn't allocate memory for a Fred" << endl;
      abort();
    }
 
Mais heureusement, si à l'exécution le système ne peut pas allouer sizeof(Fred) octets lors d'une instruction p = new Fred(), C++ lancera une exception bad_alloc. Contrairement à malloc(), new ne retourne jamais NULL!
 
Écrivez-donc simplement:
 
    Fred* p = new Fred();    // Pas la peine de vérifier si p vaut NULL
 


 
[url]http://www.ifrance.com/jlecomte/c++/c++-faq-lite/freestore-mgmt-fr.html#[16.5][/url]
 
Voila, donc d'apres eux new ne retourne jamais NULL !

n°228652
YungMakko
Posté le 16-10-2002 à 12:53:40  profilanswer
 

Sous MFC, en effet, tu peux ecrire:

Code :
  1. TRY
  2. {
  3.     pObject = new CMyObject();
  4. }
  5. CATCH(CMemoryException,e)
  6. {
  7.     // Handle error
  8. }
  9. END_CATCH


 
De toute façon, si le new echoue, y'a de forte chance que l'utilisateur n'arrive pas à faire grand chose avec ton programme, c'est que le système est complètement out of memory. Souvent y'a d'autre applies qui vont cracher avant la tienne!
 
Le seul gros avantage des exceptions, c'est comme d'hab, de simplifier le code, et de faire un seul catch à haut niveau, sans te soucier à plus bas niveau du control de la valeur de retour de chaque allocation. Le code est donc plus condensé, plus lisible, et plus robuste. Aucun risque d'oublier de controler un new.


Message édité par YungMakko le 16-10-2002 à 12:55:11

---------------
In tartiflette, we trust!
n°228655
YungMakko
Posté le 16-10-2002 à 12:56:55  profilanswer
 

hellbilly  
Précision très interessante!


Message édité par YungMakko le 16-10-2002 à 12:58:05

---------------
In tartiflette, we trust!
n°228735
hellbilly
free smile
Posté le 16-10-2002 à 15:17:59  profilanswer
 

ok merci pour ces precisions

n°228745
BENB
100% Lux.
Posté le 16-10-2002 à 15:31:34  profilanswer
 

new(nothrow) retourne NULL en cas de Pb d'allocation et ne genere pas d'exception....


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

  valeur de retour d'un new ?

 

Sujets relatifs
API Sendmessage et retour de flamme[Php/MySQL] Pb, pas de retour à la ligne quand je reccupère la BDD ...
[Résolu] chopper la valeur d'un combobox selectionnéAffecter une valeur à une variable en javascript
[CSS] peut on remplacer la valeur de background par une variable ?Export au format csv et retour chariot
Problème de script: passer une valeur d'un popup à la fenêtre...MySQL - Comment avoir la prochaine valeur d'un increment??
[php + javascript] valeur de retour ???[C] Question sur les retour de valeur
Plus de sujets relatifs à : valeur de retour d'un new ?


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