ポインタの解放

解決


るるとん@K  2004-05-19 02:59:10  No: 9027  IP: [192.*.*.*]

ポインタについて、色々試しています。
----------------------------------------
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  IP: [192.*.*.*]

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

編集    削除
るるとん@K  2004-05-19 03:12:36  No: 9029  IP: [192.*.*.*]

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

編集    削除
jok  2004-05-19 03:30:28  No: 9030  IP: [192.*.*.*]

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

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

編集    削除
るるとん@K  2004-05-19 03:44:24  No: 9031  IP: [192.*.*.*]

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

編集    削除