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