sabri Posté(e) le 4 mai 2007 Partager Posté(e) le 4 mai 2007 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 More sharing options...
beuhbeuh Posté(e) le 4 mai 2007 Partager Posté(e) le 4 mai 2007 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 More sharing options...
theocrite Posté(e) le 4 mai 2007 Partager Posté(e) le 4 mai 2007 Évite juste d'écrire dans cette variable sinon ça explose. Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 7 mai 2007 Partager Posté(e) le 7 mai 2007 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... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.