次の方法で共有


インデックスが配列の境界外ですと表示され困ってます。

質問

2010年1月11日月曜日 3:43

「IndexOutOfRangeExceptionはハンドルされませんでした。
インデックスが配列の境界外です」と表示されてしまいます。
原因が全く分からず一切すすめず困っています。

Private Sub GaborFilter()
        Dim buf(256, 256) As Double
        Dim gabor(25, 25) As Double




 For y = 25 To (bmp.Height - 1) - 25
            For x = 25 To (bmp.Width - 1)
                buf(x, y) = 0
                tmp = 0
                For q = y - 12 To y + 12
                    For p = x - 12 To x + 12
                        tmp += gabor(x - p + 12, y - q + 12) * pix2(p, q, 2)←エラーが出ているのはココ
                    Next p
                Next q

VB初心者のためネットで調べても分からず、どなたか分かる方がいらっしゃいましたら是非お願いします。

すべての返信 (4)

2010年1月11日月曜日 4:21 ✅回答済み | 1 票

pix2(p, q, 2)が配列なのか関数なのかわかりませんが、For x = 25 To (bmp.Width - 1) - 25 にしていないので、pが配列の上限を超えてしまってるからでは?
たとえばbmp.Widthが100の場合、pは13~111の範囲を取りますね。


2010年1月11日月曜日 4:35 ✅回答済み

「IndexOutOfRangeExceptionはハンドルされませんでした。
インデックスが配列の境界外です」と表示されてしまいます。
原因が全く分からず一切すすめず困っています。

その例外のメッセージを読んで、何も分からないと言うことだったんでしょうか?

これは、確保している配列のサイズを超えた場所を見ようとしたときにスローされる例外です。
q やら、p やらの値と、bmp.Width と bmp.Height と見比べて、予想より数値が大きくなっていないか、小さくなっていないかをデバッグで見極めてください。
ステップ実行、ブレークポイント、ウォッチなど、Visual Studio の IDE には便利な機能がありますので、それらを活用し、バグの原因を調査・推測できるように努めましょう。

最初は難しいかもしれませんが、これらのことができるようになってくると、質問する頻度は減ると思います。質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。


2010年1月11日月曜日 4:56

今度は算術演算の結果オーバーフローが発生しましたとなってしまいました。

  • 25 をしたことが原因なのでしょうか。

提示されている情報からは分かりません。

コードが実現しようしていることを理解すれば、何か想像できませんか?
他人のコードを丸写ししするだけでは、今のように情報不足で質問を繰り返すことになりますよ。 質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。


2010年1月11日月曜日 5:06

回答ありがとうございます。
まだまだ未熟で分からないことばかりですが
自分で何とかしなくてはなりませんね。
お恥ずかしいです。
気お付けます。ありがとうございました。