c++ - 复制数据的奇怪错误

标签 c++ opencv matrix copy

我正在尝试在 OpenCV 中读取视频帧,然后将数据复制到我的另一个 C++ 代码中以执行其他操作。我的代码如下:

cv::Mat capturedFrame; 
int newData[600][800];
std::cout<<"Debug1 " << std::endl;
memcpy((char*)newData, (char*)capturedFrame.data, 600*800*sizeof(int) );
std::cout<<"Debug2 " << std::endl;
mycode.setData ( newData );
std::cout<<"Debug3 " << std::endl;

然后“setData”类定义如下:

char data [600][800];
void mycode::setData ( char newData[600][800] )
{
  for ( int m=0; m < 600; m ++ )
  {
      for ( int n = 0; n < 800; n ++ )
      {
          data[i][j] = newData[i][j]; 
      }
  }
}

但代码在执行到该行时停止:

    mycode.setData ( newData );

让我困惑的是,如果我删除这段代码,那么我在屏幕上可以看到“Debug1”到“Debug3”,这是正常的。但是如果我使用这段代码,即使没有在屏幕上打印出“Debug1”和“Debug2”,程序也会停止。这真是奇怪。我也试图注释掉“setData”类中的所有行,使其成为一个空类,但错误仍然是一样的。所以我相信这与“setData”类无关。 我也知道“capturedFrame.data”是正确的,因为我对它执行了一些其他过滤器,结果很好。有人可以在这里解释错误吗?

编辑:

我使用了调试器,但没有错误信息,只是程序停止了响应。另外,我将数据类型更改为“char”。

最佳答案

这个数组:

int newData[600][800];

大于 1 MB。如果这是一个局部变量,那么您可能会破坏堆栈。

data 数组可能也是如此,但由于您的代码片段的上下文非常少,因此很难知道哪些是静态分配的,哪些是自动分配的。

我认为您应该考虑动态分配这些大型数组。

关于c++ - 复制数据的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12635779/

相关文章:

r - 如何在散点图矩阵中插入趋势线

performance - 是否可以加速此 MATLAB 脚本?

c++ winldap 不返回所有条目。停在 4000

opencv - OpenCV中霍夫圆和minEnclosed圆检测圆的区别?

c++ - boost 线程中的 "too few arguments to function"

python - 使用 OpenCV 更改像素的颜色

matlab - 在Matlab中按升序重新排序的位置?

c++ - C++初始化后的数组赋值

c++ - 有没有办法让 C++ Switch 语句循环回到第一种情况?

c++ - 在 C++ 中将字符数组添加到 const string&