【问题标题】:mex file error const input prhs changes after mex is calledmex 文件错误 const input prhs 在调用 mex 后更改
【发布时间】:2016-03-06 22:18:34
【问题描述】:

我正在编写一个获取视频帧的 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 不是意味着'输入不会在墨西哥改变'吗?

【问题讨论】:

    标签: matlab mex


    【解决方案1】:
    1. const mxArray* prhs[] 仅包含指向mxArray[]指针。事实证明,可以(尽管风险很大)更改mexFunction 中的输入参数的值。

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

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多