2013-01-04 28 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]为空(或其中有一个随机值),这是因为您正在访问,超出了单元阵列的末尾