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

解決


ahsan  2009-05-01 22:44:35  No: 34239

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


くらら  2009-05-02 00:10:37  No: 34240

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


monaa  2009-05-02 03:58:32  No: 34241

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


ahsan  2009-05-03 01:58:31  No: 34242

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


monaa  2009-05-06 00:05:10  No: 34243

レスがないようなので、経験はありませんが。
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-06 00:22:08  No: 34244

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


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

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






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