PDA

View Full Version : یک مشکل در مورد آزاد کردن Pointer



حمیدرضاصادقیان
جمعه 19 بهمن 1386, 17:47 عصر
سلام دوستان .من یک لینک لیست ایجاد کردم و وقتی که میخوام یک نود رو حذف کنم از کد زیر استفاده میکنم.


If Temp=Head Then
Begin
Head:=Temp.Next;
// head^.Previous:=Nil;
dispose(temp);
// temp:=nil;
If head=nil then
Begin
head:=nil;
NewNode:=nil;
Tail:=nil;
Temp:=Nil;
End Else
Begin
Temp:=Head;
Checksum;
End;
End Else

البته قسمتهایی که کامنت شده رو جدیدا اضافه کردم و مشکل حل شد. ولی میخوام بدونم بعد از اینکه متغیر temp رو ازاد میکنم با دستور dispose . و وقتی یک متغیر دیگر رو به آدرس اون ارجاع میدم قائدتا باید به من پیغام access violation بده زیرا دیگه اون آدرس نباید وجود داشته باشه.
در صورتی که اون آدرس وجود داره .مقادیر عددی که داخلش هست درسته ولی مقادیر متنی اون چرت و پرت شده.من مجبور شدم بعد از dispoSe به اون مقدار nil بدم تا مطمئن بشم دیگه وجود نداره.

vcldeveloper
شنبه 20 بهمن 1386, 02:47 صبح
بعد از فراخوانی Dispose مقدار خانه حافظه ایی که پوینتر بهش اشاره کرده نامشخص میشه، ولی لزوما بالافاصله آزاد نمیشه.

حمیدرضاصادقیان
شنبه 20 بهمن 1386, 07:34 صبح
ممنون.پس باید بهش nil اختصاص بدم.درسته؟

vcldeveloper
شنبه 20 بهمن 1386, 14:33 عصر
ممنون.پس باید بهش nil اختصاص بدم.درسته؟
بله


-----------