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