【QBASIC互換!?】FreeBasic【GPL】
■ このスレッドは過去ログ倉庫に格納されています
0451デフォルトの名無しさん
2011/11/12(土) 13:34:41.10ポインタを勘違いしているよ
君のコードでbufをFunction内でDeallocateしたら
せっかく割り当てたメモリに格納したデータが消えてしまうでしょ
Functionの戻り値がWString型のポインタを返すのだから
返って来るのはデータを格納しているメモリ上のアドレス
だからそれを格納している変数にアスタリスク付けて(つまりValue Of)
値を取得するんだよ
君のコードで言ったらPrint *Expand(....の部分
これだとFunctionの中で割り当てたメモリ上のデータが残ったままになる(アドレスを手に入れておらずメモリリーク)
直接Printするのではなく、ポインタに入れてそれを後で解放するの
Dim As WString Ptr result ' 格納するポインタ
result = Expand(Japanese) ' アドレスを格納
Print *result ' そのアドレスにある値を表示
deallocate( result ) ' resultが指し示しているアドレスに入っている値を開放
result = 0 ' ポインタに0を与えてポインタからアドレスを抹消
FreeBASICはBASIC言語だけど、ポインタを当たり前のように使うコードが多いから
日本語の解説が多いC言語辺りで勉強したら?
それと>>448のコードはちゃんと表示されるよ(因みにXP SP3 フォントはMSゴシック)
■ このスレッドは過去ログ倉庫に格納されています