Aller au contenu

delete ne marche pas


sabri

Messages recommandés

salut à tous;

j'ai pas compris pourquoi mon pc ne déssaloue pas la mémoire avec l'instruction delete;

voici un ptit exple que la trouvé dans un livre ;

#include <iostream.h>

#include <stdlib.h>

void main()

{

float* q= new float(3.14159);

delete q;

*q = 2.71828; // instruction non valable (car q a été désalloué) mais mon pc l'accepte

cout<<"*q: "<<*q<<endl;

cout<<"q: "<<q<<endl;

cout<<"&q: "<<&q<<endl;

}

affichage:

*q: 2.71828

q: 0x00441F40

&q: 0x0012FF7C

////

je vous demande s'il s'agit d'un défaut de matériel ou de logiciel ( compilé sous Microsoft visual studio 6.0)

merci de lire mon message et de me répondre.

Lien vers le commentaire
Partager sur d’autres sites

un delete efface la donnée pointée, pas le pointeur... donc en gros après ton delete q, ton pointeur q vaut null et l'espace mémoire dans lequel était stockée la valeur pointée par q est désallouée, mais *q est toujours déclaré, donc tu peux lui réaffecter une nouvelle valeur...

Ce n'est ni une erreur matérielle, ni une erreur logicielle, c'est une feature du c++ !

Lien vers le commentaire
Partager sur d’autres sites

hum.

moi j'aurais dit le contraire : l'espace réservé à l'adresse q est désaloué, donc en théorie *q n'est plus writable. par contre, ça ne change pas la valeur de q qui point toujours cette adresse. Si tu as de la chance, l'OS te permet quand même d'écrire à cet endroit (par l'affectation *q=truc;), si tu n'a pas de chance, alors ça segfault...

:D

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...