[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00369] Re: 配列?ポインタ?



こんにちは、dieです。


On Mon, 21 Aug 2000 21:33:57 +0900 (JST)
in [WitchTech 00367] 配列?ポインタ?
tomysin@rf6.so-net.ne.jp (Tomysin) wrote:

> どうも、とみしんです。

> その1のコードはVCでも確認しましたが
> その時はその2のコードと同じ正常な値が出力されました。
> みなさんのとこではどうでしょう?
> 
> ちなみにコンパイラはLSI-Cを使ってます。


LSI-Cの出力コードを読んでみたのですが、結論から言うと
「その1、その2、両方ともアウト」です(^^;

根本的な理由は DS != SS にあります。(思ったより深刻だね・・これって)

その2の方はおそらく見た目は動くと思う(私は実行してみたわけ
ではないです)のですが、

> 	int a[] = { 40, 50, 60, 70, 80, }, *pa = a;
> 	int b[] = { 30, 25, 22, 38, 41, }, *pb = b;

この部分を「実行(初期化)」するときに、プログラマの意図しない
メモリを破壊しています。「プログラマの意図したメモリ」はスタック上に
なるのですが、実際にはデータセグメントの特定位置を初期化しています。
この事実は1、2両方とも同じですが、その2の場合は破壊したところを
ポインタが指しているので、表示だけは正常になるのだと思います。
(でもそこに他のデータがあったらゲームオーバー)

解決策としては、やはり static を付けることですね。
もし「定数テーブル」として使うのではなく、あくまで初期化の意図が
あるということでしたら、static 配列を memcpy() とかでコピーしてくる
必要があると思います。

___
澤田 大輔(die)
email: die@zonze.nu(home), swd@techbrains.co.jp(office)


ML Archives