ポインタの解放

解決


るるとん@K  2004-05-19 02:59:10  No: 9027

ポインタについて、色々試しています。
----------------------------------------
var
param:string;
p:PString;
begin
new(p);
p^:=Edit1.Text;
param:=inttostr(integer(p));
//
ShowMessage(PString(strtoint(param))^);
dispose(p);//pを解放
end;
----------------------------------------
このように書き、最後にp=nilか調べるために、
ShowMessage(inttostr(integer(p)));
としたら、適当な数値が表示されます。
if not(p=nil) then ShowMessage('');
としても、空メッセージが表示され、
pが解放されていないようです。
何故、ポインタpは解放されないのでしょうか?
宜しくお願いしますn(_ _)n


るるとん@K  2004-05-19 03:01:59  No: 9028

DisposeでPStringは解放できないのでしょうか?


るるとん@K  2004-05-19 03:12:36  No: 9029

Disposeは参照先の内容を消すだけで、
ポインタは空の部分を参照し続けるわけですか?


jok  2004-05-19 03:30:28  No: 9030

> 何故、ポインタpは解放されないのでしょうか?

Dispose() はポインタが指す実体をメモリから解放するだけであり、そのポインタ
に nil を代入してくれるわけではありません。ポインタが nil かどうかとその
ポインタが指している(指していた)実体が解放されているかどうかは、別問題です。


るるとん@K  2004-05-19 03:44:24  No: 9031

わかりました
jokさん、有難う御座いましたn(_ _)n
Disposeを呼び出してもポインタは既に解放されたメモリを参照するわけですね


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加