Изменился ли заголовок MATLAB R2019a mxArray? - PullRequest
2 голосов
/ 28 мая 2019

У меня есть мекс-код MATLAB, который взламывает заголовок mxArray для чтения и изменения таких полей, как указатель CrossLink (используется для общих копий данных) и т. Д. Это необходимо для того, чтобы я мог работать с очень большими переменными внутри мекс-процедур без созданияглубокие копии.Этот код хорошо работает до R2018b, но теперь вылетает MATLAB.Что изменилось?

1 Ответ

3 голосов
/ 28 мая 2019

Заголовок mxArray изменился в R2019a. Расположение поля 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. Код C для определения версии MATLAB во время компиляции и выполнения можно найти здесь:

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

...