【问题标题】:Did the MATLAB R2019a mxArray header change?MATLAB R2019a mxArray 标头是否更改?
【发布时间】:2019-05-28 16:40:08
【问题描述】:

我有 MATLAB mex 代码,它侵入 mxArray 标头以读取和修改 CrossLink 指针(用于共享数据副本)等字段。这对于允许我在 mex 例程中处理非常大的变量而无需创建深拷贝。此代码在 R2018b 之前运行良好,但现在使 MATLAB 崩溃。发生了什么变化?

【问题讨论】:

  • 谢谢!很棒的信息!
  • 并且正如其他地方所讨论的那样,它看起来已经发生了变化。例如,2020b 显然不同......

标签: matlab mex


【解决方案1】:

mxArray 标头在 R2019a 中已更改。 mxArray 标头中 CrossLink 字段的位置已移到反向 CrossLink 字段旁边。所以,R2018b 及更早版本的顺序是这样的:

void *RevCrossLink;
mxClassID ClassID;
int VariableType;
mxArray *CrossLink;
    :
etc.

但是对于 R2019a 是这样的

void *RevCrossLink;
mxArray *CrossLink;  <-- moved
mxClassID ClassID;
int VariableType;
    :
etc.

因此,如果您希望代码稳健并在不同的 MATLAB 版本下编译/运行,则需要以编程方式确定 MATLAB 版本。可在此处找到用于在编译和运行时确定 MATLAB 版本的 C 代码:

https://www.mathworks.com/matlabcentral/fileexchange/67016-c-mex-matlab-version

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多