[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[WitchTech 00369] Re: 配列?ポインタ?
- Subject: [WitchTech 00369] Re: 配列?ポインタ?
- From: Daisuke Sawada <swd@techbrains.co.jp>
- Date: Tue, 22 Aug 2000 12:56:09 +0900
こんにちは、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