0

ピクセル値(w = 30、h = 10)の読み取りに問題があります。私が使用しているとしましょう

  1. int readValue = cvGetReal2D(img、y、x); と
  2. int readValue = data [y * step + x];

(1)と(2)の方法を使用して、w = 35、h=5のピクセル値にアクセスしようとしているとしましょう。(1)は範囲外のインデックスのエラーを出力します。しかし、なぜ(2)は範囲外のインデックスのエラーを出力しないのですか?

その後、try ... catch()...を使おうとしています。

4

1 に答える 1

1

あなたは次のメモリの連続ブロックを持っています

size  = w*h = 300

w=35およびh=5で、方程式は次のようになります。

data[5*30+35] = data[190] < data[300]

したがって、エラーはありません。これがc++の場合、データのインデックスが299より大きい場合でも、エラーはスローされません。その場合、境界を超えてデータにアクセスすることになり、未定義の動作が発生します。

cvGetReal2D(img、y、x)は、有効なアドレスに解決できたとしても、インデックスの1つがそのディメンションの定義されたサイズよりも大きいことを通知するのに十分賢いと思います。

于 2012-09-21T16:43:48.337 に答える