Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复制数据时出现奇怪的错误 我试图读取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;_C++_Opencv_Matrix_Copy - Fatal编程技术网

复制数据时出现奇怪的错误 我试图读取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;

复制数据时出现奇怪的错误 我试图读取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;,c++,opencv,matrix,copy,C++,Opencv,Matrix,Copy,让我困惑的是,如果我删除了这段代码,那么我可以在屏幕上看到“Debug1”到“Debug3”,这是正常的。但是,如果我使用这段代码,即使没有在屏幕上打印“Debug1”和“Debug2”,程序也会停止。这真奇怪。我还试图注释掉“setData”类中的所有行,使其成为空类,但错误仍然是一样的。所以我相信这不是关于“setData”类的。 我还知道“capturedFrame.data”是正确的,因为我对它执行了一些其他过滤器,结果很好。有人能解释一下这里的错误吗 编辑: 我使用了调试器,但没有错误

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

编辑:

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

如果你不加评论

mycode.setData ( newData );
编译优化器可能知道未使用
newData
,因此

memcpy((int*)newData, (int*)capturedFrame.data, 600*800*sizeof(int) );
也可能被消除,因此可能未执行

问题可能存在于
memcpy
方法中,甚至其他地方

基于您提供的有限信息,很难调查真正的原因,但我建议您可以深入研究其他代码。

如果您不加评论的话

mycode.setData ( newData );
编译优化器可能知道未使用
newData
,因此

memcpy((int*)newData, (int*)capturedFrame.data, 600*800*sizeof(int) );
也可能被消除,因此可能未执行

问题可能存在于
memcpy
方法中,甚至其他地方

根据您提供的有限信息,很难调查真正的原因,但我建议您可以深入研究其他代码。

此数组:

int newData[600][800];
大于1 MB。如果这是一个局部变量,那么您很可能会破坏堆栈

数据
数组可能也是如此,但由于您的代码片段几乎没有上下文,因此很难知道静态分配与自动分配是什么

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

这个数组:

int newData[600][800];
大于1 MB。如果这是一个局部变量,那么您很可能会破坏堆栈

数据
数组可能也是如此,但由于您的代码片段几乎没有上下文,因此很难知道静态分配与自动分配是什么


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

你能剪切粘贴你的代码吗?行
data=newData
甚至不应该编译,更不用说遇到运行时问题了。在
mycode::setData
函数中的
data=newData
行中,您分配了480000次相同的值。如果两个缓冲区大小相同,则可以使用
memcpy
。看一看了解更多关于C++中的数组。对不起,我的错误,我编辑成了[DAT[i] [j]=[i] [j]。开始时,你试过在调试器中运行程序吗?另外,它不应该是
data[m][n]=newData[m][n]在你的循环中?你不认为使用类似或甚至更有效吗?是的,我尝试在调试器中运行,但没有错误消息,但程序只是停止响应。你能剪切粘贴你的代码吗?行
data=newData
甚至不应该编译,更不用说遇到运行时问题了。在
mycode::setData
函数中的
data=newData
行中,您分配了480000次相同的值。如果两个缓冲区大小相同,则可以使用
memcpy
。看一看了解更多关于C++中的数组。对不起,我的错误,我编辑成了[DAT[i] [j]=[i] [j]。开始时,你试过在调试器中运行程序吗?另外,它不应该是
data[m][n]=newData[m][n]在你的循环中?你不认为使用类似或甚至更有效吗?是的,我尝试在调试器中运行,但没有错误消息,但程序只是停止响应。