May 4, 200718 yr 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.
May 4, 200718 yr 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++ !
May 7, 200718 yr 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...
Archived
This topic is now archived and is closed to further replies.