C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

(VB2005)配列のインデックス指定方法


(過去ログ 5 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■6037 / inTopicNo.1)  (VB2005)配列のインデックス指定方法
  
□投稿者/ りばぁ 二等兵(1回)-(2006/08/26(Sat) 16:33:39)

分類:[VB.NET] 


分類:[VB.NET] 

初めて書き込みます。宜しくお願いします。
VB2005で、下記のサンプルコードを、リリース版とデバッグ版でそれぞれビルドして下さい。

-----ここからコード
Dim strDat(10) As String
Dim i As Integer

For i = 0 To 9
strDat(i) = CStr(i)
Next


For i = 0 To 3
MsgBox(strDat((i * 2) + 2)) '(1)
MsgBox(strDat((i * 2) + 2)) '(2)
Next
-----ここまで

実行してみると、デバッグ版は正常なのですが、リリース版では、
(1)と(2)の行で、本来は同じ値がメッセージボックスに表示されると思うのですが、そうなりません。
回避策として、

Dim iIndex As Integer
:
:
For i = 0 To 3
iIndex = (i * 2) + 2
MsgBox(strDat(iIndex)) '(1)
MsgBox(strDat(iIndex)) '(2)
Next

のようにすると正常に動きます。
バグなのか仕様なのか分からないので、ご意見を伺いたいです。

ちなみにこのコードをVB.NET2003で実行した場合は、リリース版もデバッグ版も正常に動作しました。

OSはWindowsXP SP2です。


0
引用返信 編集キー/
■6039 / inTopicNo.2)  Re[1]: (VB2005)配列のインデックス指定方法
□投稿者/ 魔界の仮面弁士 少尉(126回)-(2006/08/26(Sat) 17:22:00)

分類:[VB.NET] 

> VB2005で、下記のサンプルコードを、リリース版とデバッグ版でそれぞれビルドして下さい。

当方では、現象を確認できませんでした。
掲示板に記載した以外に、何か省略しているコード等はありませんか?


> バグなのか仕様なのか分からないので、ご意見を伺いたいです。
デバッグ/リリースそれぞれのアセンブリで、該当部分の IL コードが
どのように違うか、チェックしてみては如何でしょう。

0
引用返信 編集キー/
■6040 / inTopicNo.3)  Re[2]: (VB2005)配列のインデックス指定方法
□投稿者/ επιστημη 軍曹(79回)-(2006/08/26(Sat) 17:51:12)
επιστημη さんの Web サイト

分類:[VB.NET] 

No6039に返信(魔界の仮面弁士さんの記事)
> 当方では、現象を確認できませんでした。

僕とこでは再現します。
Release版だと二つ目のMsgBoxで"次回表示すべき値"が現れます。(最後は'空白')

> VB.NET2003で実行した場合は、リリース版もデバッグ版も正常に動作しました。

であるなら、コンパイラなり実行環境なりになんらかの不具合がありそう。

再現した僕の環境は:
Microsoft Visual Studio 2005
Version 8.0.50727.42 (RTM.050727-4200)
Microsoft .NET Framework
Version 2.0.50727
Microsoft Visual Basic 2005
77956-007-4000003-41687


0
引用返信 編集キー/
■6048 / inTopicNo.4)  Re[3]: (VB2005)配列のインデックス指定方法
□投稿者/ 魔界の仮面弁士 少尉(127回)-(2006/08/26(Sat) 20:09:51)

分類:[VB.NET] 

コンパイルしたアプリ、あるいは *.vshost.exe の方は、
リリース/デバッグで何か大きな違いはありそうですか?


> 再現した僕の環境は:
プロダクトID が異なるとはいえ、環境自体は同じですね。
が、やはり当方では再現しませんでした。

強いてあげるならば、当方では KB912019 の hoffix を適用しているのですが、
もしかして、これが関係してくるのかな?
(hotfix を適用していない環境が手元に無いので、比較はできませんが…)

----------------
Microsoft Visual Studio 2005
Version 8.0.50727.42 (RTM.050727-4200)
Microsoft .NET Framework
Version 2.0.50727
インストールされている Edition: Enterprise
(中略)
Microsoft Visual Studio 2005 Tools for the Microsoft Office System 日本語 用の Hotfix (KB912019)
この Hotfix は Microsoft Visual Studio 2005 Tools for the Microsoft Office System 日本語 用です。\n
後で最新版の Service Pack をインストールした場合、この Hotfix は自動的にアンインストールされます。\n
詳細については、http://support.microsoft.com/kb/912019 を参照してください。
----------------


0
引用返信 編集キー/
■6050 / inTopicNo.5)  Re[4]: (VB2005)配列のインデックス指定方法
□投稿者/ επιστημη 曹長(81回)-(2006/08/26(Sat) 21:26:52)
επιστημη さんの Web サイト

分類:[VB.NET] 

> コンパイルしたアプリ、あるいは *.vshost.exe の方は、
> リリース/デバッグで何か大きな違いはありそうですか?

すくなくとも *.vshost.exe は関係なさげっす。
IDEの外からDebug/Release版exeを直接kickしても同様の挙動ですし。


0
引用返信 編集キー/
■6051 / inTopicNo.6)  Re[4]: (VB2005)配列のインデックス指定方法
□投稿者/ りばぁ 二等兵(2回)-(2006/08/26(Sat) 21:34:41)

分類:[VB.NET] 

ありがとうございます。
コードに関しては、最初は作成中のシステムのデバッグ中に発見したため、
検証のためにサンプルコードを書いたので、省略等はありません。

VS2005のEditionは書くのをすっかり忘れていましたが、
確かTeam Edition for Software Architectsだと思います。
現在自宅のため、詳細は確認できませんが。

パッチがリリースされていることは知らなかったので一切当てていません。
ご指摘のパッチは、症状は異なりますが当ててみたほうが良いですかねぇ?


0
引用返信 編集キー/
■6052 / inTopicNo.7)  Re[5]: (VB2005)配列のインデックス指定方法
□投稿者/ επιστημη 曹長(82回)-(2006/08/26(Sat) 22:05:44)
επιστημη さんの Web サイト

分類:[VB.NET] 

> パッチがリリースされていることは知らなかったので一切当てていません。
> ご指摘のパッチは、症状は異なりますが当ててみたほうが良いですかねぇ?

なんかあんま関係なさげなパッチですけど、違いがそこだけだとすると、ねぇ ^^;
僕の場合VB自体ほとんど出番がないので放置しておいてもいっかー、とか思ってます。
が、実行環境に問題があるんだとすればC#あたりでも同様のコトが起こるんじゃねぇかとヒヤヒヤですけども。


0
引用返信 編集キー/
■6054 / inTopicNo.8)  Re[6]: (VB2005)配列のインデックス指定方法
□投稿者/ まどか 大佐(223回)-(2006/08/26(Sat) 22:44:09)

分類:[VB.NET] 

当方でも再現しました。
2-4-4-6-6-8-8-空白

VS2005T/S
Windows2000SP4+最新MicrosoftUpdate

再現したケース

・For i As Integer = 0 To 3
・For ii1 As Integer = 0 To 3
・For j As Integer = 0 To 3
・ロジックをクラスメソッドへ移動して呼び出し
・MessageBox.Showへ変更
・strDat(9)へ変更
・(j * 2 + 2)

再現しなかったケース

・(j + j + 2)

*演算子が怪しい?

MSDNフォーラム
http://forums.microsoft.com/msdn-ja/default.aspx?siteid=7
ここの「Visual Studio フィードバック」へ投稿されてはいかがでしょうか。

0
引用返信 編集キー/
■6055 / inTopicNo.9)  Re[5]: (VB2005)配列のインデックス指定方法
□投稿者/ Hongliang 曹長(85回)-(2006/08/26(Sat) 23:49:47)
Hongliang さんの Web サイト

分類:[VB.NET] 

IL 的にも「正しい」ですね。

以下いじって気付いた点。
・動的アセンブリで VB のコードと同じ出力をする IL を書いて実行させても再現したので、JIT コンパイル時の最適化のバグっぽい。
・* 定数 + 定数 の形だと発生。どちらかが変数だと最適化の対象外になるのか問題なし。+ じゃなくて - でも発生。
・mul_ovf が使われた時に発生する。vbc.exe でも /removeintchecks+ オプション付きだと発生しない。csc.exe では /checked+ 付きだったり checked ステートメントで積算を囲んだりすると発生する。

0
引用返信 編集キー/
■6068 / inTopicNo.10)  Re[6]: (VB2005)配列のインデックス指定方法
□投稿者/ 魔界の仮面弁士 少尉(128回)-(2006/08/27(Sun) 18:02:05)

分類:[VB.NET] 

> なんかあんま関係なさげなパッチですけど、違いがそこだけだとすると、ねぇ ^^;

そのパッチを入れてない PC があったので、試してみましたが、
デバッグ/リリースのいずれも "2-2-4-4-6-6-8-8" で変化無しでした。

う〜ん。なんだか自分だけ蚊帳の外で悔しかったり。(^-^;

0
引用返信 編集キー/
■6074 / inTopicNo.11)  Re[6]: (VB2005)配列のインデックス指定方法
□投稿者/ りばぁ 二等兵(3回)-(2006/08/27(Sun) 22:45:13)

分類:[VB.NET] 

No6068に返信(魔界の仮面弁士さんの記事)
>>なんかあんま関係なさげなパッチですけど、違いがそこだけだとすると、ねぇ ^^;
>
> そのパッチを入れてない PC があったので、試してみましたが、
> デバッグ/リリースのいずれも "2-2-4-4-6-6-8-8" で変化無しでした。
>
> う〜ん。なんだか自分だけ蚊帳の外で悔しかったり。(^-^;

ぼくは逆に何台かのPCで確認しましたが、どれでも再現していました。
他に何人かの方が再現しているので、環境に依存する何かがあるのも考えにくい気がします。
とりあえず、今回は時間も無いので異常が発生しないようにコードを修正して回避しておこうと思います。

後日、MSDNのフィードバックの方にも投稿してみようかな・・・。
(まどかさん、アドバイスありがとうございます。)

中途半端な感じもしますけど、一応、解決にチェックしておきます。
みなさん、ありがとうございました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -