我想讀取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」。
你能剪切粘貼你的代碼嗎? 'data = newData;'行不應該編譯,更不用說你遇到運行時問題。 –
您在'mycode :: setData'函數的'data = newData'行中分配了相同的值480000次。如果兩個緩衝區的大小相同,則可以使用'memcpy'。看看[這個答案](http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c/4810668)瞭解更多關於C++數組。 –
對不起,我的錯誤,我編輯成「data [i] [j] = [i] [j]」。 –