2013-01-04 27 views
1

我正在一個Matlab代碼取的視頻幀,並將它們的單元陣列如MEX文件錯誤常量輸入prhs MEX後的變化被稱爲

frames{fr} = read(videoObj, fr); 

內對於一個樣本視頻,我檢查它包含84幀(視頻有84幀),並且所有單元格都充滿了圖像。

我有一個MEX文件,作爲標準配置,它是如

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 

正如我已閱讀MEX文件創建的屬性,他們說輸入prhsconst mxArray從而使MEX代碼中無論發生什麼事情,輸入不會改變。我給matlab的幀單元陣列作爲mex文件的輸入,因爲prhs[0]是幀單元,我做了一些處理(我發誓我沒有改變我在prhs[0]中所做的)。然而,當我調試Matlab代碼時,在我調用mex文件(並將mex文件的框架作爲輸入)後,我看到了該框架,我的框架單元格的最後一個單元格似乎已被刪除。當我查看第84個單元格時,它是[],有時它是一個隨機數,例如8或4.我不明白當我調用mex文件時,我的框架單元格的最後一列消失的方式或原因。

您可能認爲我可能在我的Matlab代碼中有一個錯誤,但是當我調試時,我在處理mex之前查看了幀,它有84個單元,最後一個單元是預期的圖像,但在我打電話之後mex,幀仍然是84個單元,但最後一個單元是[]:空。

如果有人能幫助我,我將不勝感激,爲什麼會發生這樣的事情呢? const mxArray是不是意味着'輸入不會在mex中改變'?

回答

0
  1. const mxArray* prhs[]覆蓋指針到只有mxArray[]。事實證明,有可能(雖然風險很高)更改mexFunction中輸入參數的值。

  2. 另一個值得注意的是,雖然在Matlab陣列和細胞從1..n索引,在C/C++(和特別是在mex文件)元素從索引,...,n-1個。因此,在調試器中,您看到cell[84]爲空(或其中有一個隨機值),這是因爲您正在訪問,超出了單元陣列的末尾