MATLAB R2019a mxArray标头是否发生了变化?

时间:2019-05-28 16:40:09

标签: matlab mex

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

1 个答案:

答案 0 :(得分:3)

R2019a中的mxArray标头已更改。 CrossLink字段在mxArray标头中的位置已移到反向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