2013-03-08 74 views
1

我需要閱讀OpenCV中墊讀取二維數組的OpenCV墊

int main() 
{ 
Mat matrix; 
double **theArray; 
int numOfRows,numOfCols; 

cin >> numOfRows ; 
cin >> numOfCols ; 

theArray = AllocateDynamicArray<double>(numOfRows,numOfCols); 

matrix = Mat(numOfRows,numOfCols,CV_64FC1,&theArray); 

string filename = "IN.xml"; 
FileStorage fs1(filename, FileStorage::WRITE); 
fs1.open(filename, FileStorage::WRITE); 
fs1 << "locsINMat"   << matrix; 
fs1 << "descriptorsINMat" << matrix; 
fs1.release(); 
cout << "---------------------" << endl; 

FreeDynamicArray(theArray); 

} 
template <typename T> 
T **AllocateDynamicArray(int nRows, int nCols) 
{ 
     T **dynamicArray; 

     dynamicArray = new T*[nRows]; 
     for(int i = 0 ; i < nRows ; i++) 
     dynamicArray[i] = new T [nCols]; 

     return dynamicArray; 
} 

template <typename T> 
void FreeDynamicArray(T** dArray) 
{ 
     delete [] *dArray; 
     delete [] dArray; 
} 

動態二維數組我得到這個異常:在GP.exe在0x5d08f1aa 未處理的異常:0000005:訪問衝突讀取位置0x003f4000。

回答

2
float data[2][5] = {{1,2,3,4,5},{7,8,9,10,11}}; 
A = Mat(2, 5, CV_32FC1, &data); 

不會引發任何錯誤。你的行和列是否正確?

動態內存分配: 我認爲內存分配應做這樣的:

double **theArray; 
theArray= (double**)malloc(numOfRows* sizeof(double*)); 

for(i = 0; i < numOfRows; i++) 
    theArray[i] = (double*)malloc(numOfCols* sizeof(double)); 
在我的例子
+0

數組是動態的 我使用相同的變量分配數組的大小 – RBM 2013-03-08 12:16:55

+0

您可以發佈更多的代碼,以便我們可以看到你是否爲動態數組分配內存? – 2013-03-08 12:22:47

+0

我已經在問題nw – RBM 2013-03-08 12:41:18