HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0807
わかんにゃクローン変数2解決


わかんにゃ

リンク

2006/8/7(Mon) 03:03:02|NO.1830

クローン変数(dupなど)の説明で
「クローンが有効なのはクローン元の変数に代入が行なわれるまでの間だという
点に注意してください」
「変数に格納されているデータのメモリアドレス
を指し示していたとしても、変数の型や内容が更新されてメモリ位置が変更さ
れた場合に正しく参照することはできません。」
とあるんですが、予めdimやsdimで配列を指定しておけば、
メモリの位置がずれるということはないのですか?
それとも、例えばHDDのスワップなどのときに、
勝手にかわっちゃうこともあるんですか?
配列変数を扱うときに名前をつけられて便利なので、
プログラムの最初から最後まで使っていますが
これは危険なんですか?



この記事に返信する


Shinya

リンク

2006/8/7(Mon) 05:32:51|NO.1832

>dimやsdimで配列を指定しておけば、
>メモリの位置がずれるということはないのですか?

 dim や sdim で確保したバッファ内で、クローン元の変数に代入が行なわれるのは
OKです。

 だめなのは、例えば文字列変数にあらかじめ確保したバッファを超えるような
文字列を代入した場合です。
 あらかじめ確保されているバッファを超える文字列を代入
しようとすると、家(変数)に収まらないので(収まることもある)、引越しをします。
クローン元の変数が引っ越して、その住所が変わると、
クローンのさす変数の住所と一致しなくなってしまいます。(どこへ引っ越すかがわからないので)
	sdim String,100
String = "a" mes strf( "変数の住所が同じ 住所=%x",varptr(String) ) String = "b" mes strf( "変数の住所が同じ 住所=%x",varptr(String) ) // あらかじめ確保されているバッファ(100byte)を超える文字列を代入 String = "" repeat 1000 String += cnt loop mes strf( "変数は引っ越しました 住所=%x",varptr(String) )



わかんにゃ

リンク

2006/8/7(Mon) 08:35:21|NO.1833

おお、そうですか。
dup命令になれていたので、これからは少し安心して使えます。
ありがとうござました。



ONION software Copyright 1997-2021(c) All rights reserved.