|
Page : 1 2 Page Précédente | |
Auteur | Sujet : Différence entre delete p et p = NULL |
Profil supprimé | Posté le 09-04-2006 à 16:46:26 Je voudrai savoir s'il y a une différence entre delete p et p = NULL (p etant un pointeur). |
Publicité | Posté le 09-04-2006 à 16:46:26 |
Profil supprimé | Posté le 09-04-2006 à 16:53:49 Ok, merci. |
karminator98 | en fait, en C++, delete mets la valeur détruite a NULL par défaut je crois.... mais fodrais vérifier... |
kadreg profil: Utilisateur |
--------------- brisez les rêves des gens, il en restera toujours quelque chose... -- laissez moi troller sur discu ! |
Profil supprimé | Posté le 09-04-2006 à 22:00:35 Moi j'avais compris que delete supprimai l'addresse mais pas ce vers quoi il pointe, et que NULL attribuait aucune addresse au pointeur, donc je ne voyais pas la difference. |
Trap D | En y réfléchissant un peu, delete fait peut-être beaucoup plus que libérer la mémoire, il y a surement appel au destructeur de classe, mais comme je ne connais rien du tout à C++... |
Profil supprimé | Posté le 09-04-2006 à 23:03:49 Juste pour dire faire |
++fab victime du syndrome IH |
|
nargy | > ne sert a rien car quand tu fait delete p, p = NULL, faite le teste
|
Publicité | Posté le 09-04-2006 à 23:19:12 |
slash33 | Perso, je mets toujours les pointeurs libérés par delete à 0 pour détecter un mauvais usage plus tard. Parce que si le pointeur venait à être supprimé une nouvelle fois plus tard, je ne suis pas certain de trouver l'orgine du problème rapidement quoique VC m'aura probablement averti |
nargy | Comme l'indiquait ++fab:
|
++fab victime du syndrome IH |
|
nargy | Ouais, je ne me suis peut être mal exprimé.
|
Trap D | J'ai une question : en C la norme n'assure pas que NULL est identique à 0, donc il ne faut pas écrire p = 0 à la place de p = NULL (même si beaucoup de gens le font).
Message édité par Trap D le 10-04-2006 à 12:17:59 |
nargy |
Trap D |
skelter | quand tu affectes une valeur d'un type à une variable d'un autre type une convertion a lieu
|
nargy | En pratique, je ne connais aucune processeur pour lequel un pointeur NULL différent de 0 produit de meilleures optimisations. Y en a-t-il? |
Elmoricq Modérateur |
Message édité par Elmoricq le 10-04-2006 à 12:57:05 |
skelter |
|
nargy | En fait un pointeur nul est valide pour certaines fonctions (genre delete, free, realloc). Nul indique seulement qu'il est vide.
|
Elmoricq Modérateur | Cela n'aurait pas grand intérêt dans la mesure où il n'y aurait pas d'amélioration dans la détection d'erreur. |
nargy | > en C (et en C++), on s'attend à ce qu'un pointeur non initialisé ait pour valeur NULL, et pas autre chose.
|
Elmoricq Modérateur | s/non initialisé/invalide/g
|
nargy | Oui, c'est comme ça que ça été conçu: un pointeur NULL est invalide.
|
skelter | mais cette valeur c'est NULL |
Elmoricq Modérateur |
|
nargy | pointeur vide:
|
skelter | et ?
|
nargy | ha ok, bon je déélire un peu trop alors.. |
slash33 |
Message édité par slash33 le 10-04-2006 à 17:09:48 |
nargy | > Remplacer NULL par 0 revient à casser le lien sémantique
|
skelter | free(0) et free(NULL) c'est la meme chose (en C, si le compilateur dispose du prototype lui indiquant que free prend un parametre de type void*)
ca ne veut rien dire (de meme un "pointeur vide" n'a aucun sens, un pointeur contient une adresse), et si tu sous entends "une zone mémoire déjà liberer" alors c'est impossible puisque NULL est invalide
|
nargy | > en fait t'as toujours pas compris ??
|
skelter |
oui
free(NULL) à un comportement définie, en l'occurence il ne fait rien
un pointeur contient une adresse (apres sémantiquement tu peux dir que ca pointe vers ce vers quoi tu prétends que ca pointe suivant le typage), si tu lui affectes une adresse invalide et que du tentes de le dérérencer (voir plus) ca provoque un ub
NULL c'est une adresse certifié invalide pour pouvoir etre différencié d'une adresse valide, apres tu en fais ce que tu veux.
|
nargy | Lit le IEEE 754 sur les nombres flottants, compare les QNAN et les SNAN.
|
skelter |
|
nargy | laisse tomber. |
Elmoricq Modérateur | Je crois que c'est le free(NULL) qui te perturbe.
Message édité par Elmoricq le 10-04-2006 à 20:32:35 |
Publicité | Posté le |
Page : 1 2 Page Précédente |
Sujets relatifs | |
---|---|
[Image de fond fixe] Différence entre IE et firefox | [ACCESS]Changer (Null interdit) sous Acces? |
Acess et champ NULL | asp.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 null | Difference entre une execut° manuelle et part clé de registre ?? |
Plus de sujets relatifs à : Différence entre delete p et p = NULL |