GetMemで作成したポインタのバイトサイズを得るには

解決


ahsan  2009-05-01 13:44:35  No: 34239  IP: 192.*.*.*

例えば、
 p:pchar;
 s:integer;
 s:=100;
 GetMem(p,s);
とした場合、sを保持していれば、pを使用後、
 FreeMem(p,s);
とできます。
しかし、sを保持してなく、pだけの場合で
FreeMemを行いたい場合、
sを得る方法はあるのでしょうか?
s:=SizeMem(p);のような関数はあるのでしょうか?
お願いします。

編集 削除
くらら  2009-05-01 15:10:37  No: 34240  IP: 192.*.*.*

FreeMemの2番目の引数は省略可能だよね。
逆に解放するサイズを指定するとどんな利点があるのか知りたい。

編集 削除
monaa  2009-05-01 18:58:32  No: 34241  IP: 192.*.*.*

いろいろ調べてみましたが、FreeMemの第2引数って意味あるんですかね?
だれか知ってる方、私からもよろしくお願いします。

編集 削除
ahsan  2009-05-02 16:58:31  No: 34242  IP: 192.*.*.*

くららさん、monaaさん、ありがとうございます。
私の問い合わせ内容では、ご回答ただきました通りです。
私の問い合わせ方が間違っていました。すみません。
知りたかった事は、sを保持していない場合に、
サイズのみを知りたかったのです。
呼び出し元でGetMemで用意したポインタのみをサブルーチンに
渡していて、そのようなサブルーチンが沢山あります。
サブルーチンによって、その中でポインタのサイズを知る必要が
でてきました。
本当はサブルーチンにサイズの引数を追加してまわればよいのですが、
コーディングを間違えそうなので、出来れば、必要な個所だけ、
s:=SizeMem(p);のようなことを行いたかったのです。
お願いいたします。

編集 削除
monaa  2009-05-05 15:05:10  No: 34243  IP: 192.*.*.*

レスがないようなので、経験はありませんが。
VirtualQueryがそれに相当します。
http://msdn.microsoft.com/ja-jp/library/cc430228.aspx
http://itpro.nikkeibp.co.jp/article/COLUMN/20070816/279802/?ST=develop&P=1
こりゃ必要に駆られないと手を出す気はしませんね…

編集 削除
ahsan  2009-05-05 15:22:08  No: 34244  IP: 192.*.*.*

こういうの(VirtualQuery)があるのですか。
ヘルプを読んでやってみます。
ダメそうなら、じみちに、サブルーチン引数に
サイズを付けてまわります。
monaaさんありがとうございました。

編集 削除