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)不输出 index out of range 的错误呢?

之后,我尝试使用 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) 足够聪明,可以告诉您其中一个索引大于该维度的定义大小,即使它可以解析为有效地址。

于 2012-09-21T16:43:48.337 回答