为何freemem后,还可以对指针所指向的内存区域赋值? |
答題得分者是:syntax
|
like
一般會員 發表:30 回覆:35 積分:18 註冊:2005-03-10 發送簡訊給我 |
TDemoRecord = packed record
DemoMode : Integer; //演示的方式 DemoSpeed : Integer; //演示的速度 DemoStop : Integer; //演示的停留时间 DemoPicList : TStrings; //演示的图片列表 end; PDemoRecord = ^TDemoRecord; procedure TForm1.Button2Click(Sender: TObject); var aa:PDemoRecord; bb:pointer; begin GetMem(aa,100); bb:=Pointer(aa); aa^.DemoMode:=2; Inc(aa); aa^.DemoMode:=1; Dec(aa); FreeMem(aa,100); //奇怪是为何这里释放了内存区域,在下面的为何还能对aa^.demomode赋值呢? aa^.DemoMode:=3; //是不是还要对aa:=nil赋值? ShowMessage(IntToStr(aa^.DemoMode)); end; 还请各位大大指点,谢谢! |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
aa^.DemoMode:=3; //是不是还要对aa:=nil赋值?
是,否則你使用的將是「非法」的區域,隨時都有可能「會被別的地方用去,而不見」 ===================引 用 like 文 章=================== TDemoRecord = packed record DemoMode : Integer; //演示的方式 DemoSpeed : Integer; //演示的速度 DemoStop : Integer; //演示的停留时间 DemoPicList : TStrings; //演示的图片列表 end; PDemoRecord = ^TDemoRecord; procedure TForm1.Button2Click(Sender: TObject); var aa:PDemoRecord; bb:pointer; begin GetMem(aa,100); bb:=Pointer(aa); aa^.DemoMode:=2; Inc(aa); aa^.DemoMode:=1; Dec(aa); FreeMem(aa,100); //奇怪是为何这里释放了内存区域,在下面的为何还能对aa^.demomode赋值呢? aa^.DemoMode:=3; //是不是还要对aa:=nil赋值? ShowMessage(IntToStr(aa^.DemoMode)); end; 还请各位大大指点,谢谢! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |