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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Différence entre delete p et p = NULL

n°1343497
Elmoricq
Modérateur
Posté le 10-04-2006 à 20:32:17  profilanswer
 

Reprise du message précédent :
Je crois que c'est le free(NULL) qui te perturbe.
 
Faut pas. C'est juste une exception.
 
Quant au comportement de realloc() sur NULL, c'est tout bête, il est défini que s'il n'y a rien à réallouer, realloc() alloue tout court (== malloc).
 
Autrement, NULL qualifie bien un pointeur invalide. L'adresse NULL n'existe pas, chaque fois qu'on teste la validité d'un pointeur, c'est avec cette constante que ça se fait, et quand une fonction assume que le pointeur est valide, et qu'il ne l'est pas, ça plante (ou mieux, c'est parfois détecté à la compilation).
 
NULL == invalide. Dans tous les cas. C'est pas un faux NaN discret, c'est pas du bricolage, c'est sa vraie signification.


Message édité par Elmoricq le 10-04-2006 à 20:32:35
mood
Publicité
Posté le 10-04-2006 à 20:32:17  profilanswer
 

n°1343501
skelter
Posté le 10-04-2006 à 20:34:07  profilanswer
 

http://www.eskimo.com/~scs/c-faq.com/null/null1.html
 
et dis toi pourquoi les concepteurs du langage n'y aurait pas pensé si c'était vraiment nécéssaire et simple à implémenté

n°1343703
Profil sup​primé
Posté le 11-04-2006 à 00:16:49  answer
 

Je suis content d'avoir lancé un débat, moi dans mon boucin on me dit que quand on declare un pointeur sans l'initialisé il prend une addresse aléatoire et donc en mettant NULL, on ne lui assigne aucune addresse et que c'est donc une sécurité.

n°1343708
skelter
Posté le 11-04-2006 à 00:22:19  profilanswer
 

vous avez jamais vu des lib avec un toto_errno de type entier et plein de constante pour décrire différentes erreurs et une spéciale (TOTO_OK) qui indique qu'il n'y a pas d'erreur et qui sert à initialiser l'indicateur d'erreur
c'est le meme role que NULL pour un pointeur

n°1343714
Mackila
Posté le 11-04-2006 à 00:32:27  profilanswer
 

<gros lourd> Mé heu j'suis pas d'accord avec Serge, une fois dans ma vie j'ai du déréférencer un pointeur sur l'adresse 0 ! J'ai eu du bol que le compilo ait fait ce que je voulais, ou ya une astuce pour le faire ? (bon d'accord c'était pour un morceau de code pour un bootloader linuske sur un coldfire, mais bon :o )</gros lourd>

n°1343717
nargy
Posté le 11-04-2006 à 00:37:26  profilanswer
 

skelter> et tu initialise à quoi ton gestionnaire d'erreur, si le gestionnaire tombe en panne? hein?
Mackila> excellent :D

n°1343812
Elmoricq
Modérateur
Posté le 11-04-2006 à 09:53:15  profilanswer
 


 
C'est une problématique différente.
 
En C, et en C++, lorsque tu définis une variable, tu ne fais que déclarer son existence, ce qui consiste à lui donner un emplacement quelconque dans la mémoire, pour qu'elle puisse vivre, notre variable.
 
Seulement cet espace qu'on lui attribue... avant il a probablement servi à autre chose (un programme qui faisait le café, une autre variable depuis désallouée, à compter le nombre de secondes vécues par grand'mère, etc), et donc le contenu d'une variable fraîchement définie est non-prévisible.
La coutûme veut donc qu'on attribue une valeur d'initialisation à cette variable, par sécurité.
 
Et il ne faut pas se laisser berner par le fait qu'en mode debug, avec certains outils utilisés, les variables sont automatiquement mises à zéro. C'est souvent vrai en mode debug, ça ne l'est pas en mode optimisé.

n°1343857
Trap D
Posté le 11-04-2006 à 10:30:30  profilanswer
 

Elmoricq a écrit :

Et il ne faut pas se laisser berner par le fait qu'en mode debug, avec certains outils utilisés, les variables sont automatiquement mises à zéro. C'est souvent vrai en mode debug, ça ne l'est pas en mode optimisé.

D'où le nombre de post sur le thème (souvent en Visual C) :
  "Help : Je ne comprends pas, mon appli fonctionne en debug et pas en Release"

n°1344000
Profil sup​primé
Posté le 11-04-2006 à 12:32:06  answer
 

En fait quand vous me dite mode debug ou mode optimisé je ne sais pas de quoi vous parlez je sais que quand on compile on on a le choix mais je ne connait pas les différences, j'ai pas appris le C++ dans un livre de debutant et apres je me suis inspiré de différente source que je trouvais.

n°1344012
slash33
Posté le 11-04-2006 à 12:48:14  profilanswer
 

En fonction du mode de génération, le code contient plus ou moins de données de debuggage et les variables peuvent être initialisées de différentes manières. Sans compter qu'un code différent peut être compilé selon le mode choisi soit en fait en fonction du positionnement d'un flag de compilation. En ce qui concerne les règles d'optimisation de code, je laisse  la parole aux habitués du tuning d'applications.
 
Effectivement, j'ai vu très souvent dans mon envirronement professionnel les problèmes liés aux variables non initialisées. J'ai personnellement traité la chose de deux manières différentes : soit le recours à un outil de diagnotique du programme en marche sur des programmes existants, soit l'usage d'un template spécifique pour la détection d'une variable non initialisée sur les nouveaux projets. Avec un jeu de macros, je suis parvenu à un système de débrayage totalement transparent. Mais je me demande si boost, voir la STL, ne fournit pas ce genre d'outil.


Message édité par slash33 le 11-04-2006 à 12:53:13
mood
Publicité
Posté le 11-04-2006 à 12:48:14  profilanswer
 

n°1344454
skelter
Posté le 11-04-2006 à 20:32:10  profilanswer
 

nargy a écrit :

skelter> et tu initialise à quoi ton gestionnaire d'erreur, si le gestionnaire tombe en panne? hein?


 
qu'est ce que tu entends pas "en panne" ?

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[Image de fond fixe] Différence entre IE et firefox[ACCESS]Changer (Null interdit) sous Acces?
Acess et champ NULLasp.net problème de datagrid et command Delete
[WxWidget] new et pas delete !Différence entre srtucture et classe
Tester si variable est NULL ? [résolu]Newbies NULL & NOT NULL
[DataSet to Xml]Probleme si champs vaut nullDifference entre une execut° manuelle et part clé de registre ??
Plus de sujets relatifs à : Différence entre delete p et p = NULL


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