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

  • 質問

  • 「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初心者のためネットで調べても分からず、どなたか分かる方がいらっしゃいましたら是非お願いします。
    2010年1月11日 3:43

回答

  • pix2(p, q, 2)が配列なのか関数なのかわかりませんが、For x = 25 To (bmp.Width - 1) - 25 にしていないので、pが配列の上限を超えてしまってるからでは?
    たとえばbmp.Widthが100の場合、pは13~111の範囲を取りますね。
    • 回答としてマーク mei2 2010年1月11日 4:33
    2010年1月11日 4:21
  • 「IndexOutOfRangeExceptionはハンドルされませんでした。
    インデックスが配列の境界外です」と表示されてしまいます。
    原因が全く分からず一切すすめず困っています。
    その例外のメッセージを読んで、何も分からないと言うことだったんでしょうか?

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

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

すべての返信

  • pix2(p, q, 2)が配列なのか関数なのかわかりませんが、For x = 25 To (bmp.Width - 1) - 25 にしていないので、pが配列の上限を超えてしまってるからでは?
    たとえばbmp.Widthが100の場合、pは13~111の範囲を取りますね。
    • 回答としてマーク mei2 2010年1月11日 4:33
    2010年1月11日 4:21
  • 「IndexOutOfRangeExceptionはハンドルされませんでした。
    インデックスが配列の境界外です」と表示されてしまいます。
    原因が全く分からず一切すすめず困っています。
    その例外のメッセージを読んで、何も分からないと言うことだったんでしょうか?

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

    最初は難しいかもしれませんが、これらのことができるようになってくると、質問する頻度は減ると思います。
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク mei2 2010年1月11日 5:07
    2010年1月11日 4:35
    モデレータ
  • 今度は算術演算の結果オーバーフローが発生しましたとなってしまいました。
    - 25 をしたことが原因なのでしょうか。
    提示されている情報からは分かりません。

    コードが実現しようしていることを理解すれば、何か想像できませんか?
    他人のコードを丸写ししするだけでは、今のように情報不足で質問を繰り返すことになりますよ。
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク mei2 2010年1月11日 4:58
    • 回答としてマークされていない mei2 2010年1月11日 4:58
    2010年1月11日 4:56
    モデレータ
  • 回答ありがとうございます。
    まだまだ未熟で分からないことばかりですが
    自分で何とかしなくてはなりませんね。
    お恥ずかしいです。
    気お付けます。ありがとうございました。
    2010年1月11日 5:06