PDA

View Full Version : سوال: مشکل با حذف اشاره گر



Arcsinos
چهارشنبه 21 اردیبهشت 1390, 22:33 عصر
سلام
من یه اشاره گر مثلا

int *p=new int;
*p=10;
cout<<*p;
delete *p;
cout<<*p;
رو درست میکنم و بعد حذفش میکنم ولی باز هم وقتی اونو چاپ میکنم همون 10 رو چاپ میکنه . در واقع اصلا حذف نمیشه .

چی کار باید انجام بدم ؟

ممنون میشم اگه پاسخ بدید

tdkhakpur
پنج شنبه 22 اردیبهشت 1390, 00:08 صبح
شما محتوا رو آزاد میکنید باید بصورت زیر آزاد بشه.


delete p;
یا
delete[] p;

Arcsinos
پنج شنبه 22 اردیبهشت 1390, 00:24 صبح
باز هم خروجی 1010 هست و فرقی نکرده

quiet_programmer
پنج شنبه 22 اردیبهشت 1390, 13:55 عصر
با سلام.

با آزاد کرن اشاره گر شما فقط به سیستم عامل میگین که دیگه به این آدرس نیاز ندارم و میتونی مقدار دیگه ای رو تو اون آدرس بنویسی. در واقع این آدرس بصورت منطقی حذف میشه نه بصورت فیزیکی واسه خاطر همینه که دوباره همون 10 رو چاپ میکنه.

tdkhakpur
پنج شنبه 22 اردیبهشت 1390, 14:42 عصر
باز هم خروجی 1010 هست و فرقی نکرده
اگر منظورتان اینه که مطمئن بشید حافظه رزرو شده آزاد شده داخل داس نمیتوانید تشخیص بدید اما داخل ویندوز به دلیل اینکه تقریبا بطور مدام از تخصیص پویای حافظه استفاده میشه اعلان خطا مبنی بر دسترسی غیر مجاز به حافظه رو مشاهده میکنید.
در هر حالت داخل داس تا وقتی که آدرس جدید رزرو نکرده باشید این آدرس کماکان ماله برنامه شماست و میتونه ازش استفاده کنه اما ارزشی برای قرار داده داده های مهم نداره و هر لحظه میتونه داده دیگری توسط برنامه دیگه درش قرار بگیره.(البته این احتمال برا برنامه های داس قدرت چندانی نداره به خاطر اینه که تک کاربره استفاده میشه).