调用mex后mex文件错误const输入prhs更改

时间:2013-01-04 08:53:32

标签: matlab mex

我正在开发一个带有视频帧的Matlab代码,将它们放在像

这样的单元格数组中
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中改变'吗?

1 个答案:

答案 0 :(得分:0)

  1. const mxArray* prhs[]仅将指针覆盖到mxArray[]。事实证明,在mexFunction内更改输入参数的值是可能的(尽管高风险)。

  2. 值得注意的另一点是,虽然matlab中的数组和单元格是从1..n索引的,但在C/C++(尤其是mex个文件中)元素是从 0 ,...,<强> N-1 即可。因此,在调试器中,您看到cell[84]为空(或其中包含随机值),这是因为您正在访问超出单元格数组的末尾

    < / LI>