MATLAB C API: что делает mxDestroyArray (NULL)? - PullRequest
0 голосов
/ 08 февраля 2012

Я использую mxDestroyArray() функцию MATLAB и задаюсь вопросом, как правильно обрабатывать ошибки.

Если я позвонил mxCreate*Array() или что-то похожее, я получу действительный указатель на успех и NULL на неудачу, т.е. е. если память заполнена.

Если я создаю несколько массивов таким образом, и хотя бы один из них выходит из строя, я бы хотел освободить все, что мне больше не нужно.

Здесь мне интересно: нужно ли явно проверять каждое значение?

if (error) {
    if (a) mxDestroyArray(a);
    if (b) mxDestroyArray(b);
    if (c) mxDestroyArray(c);
}

или я могу просто опустить чеки?

if (error) {
    mxDestroyArray(a);
    mxDestroyArray(b);
    mxDestroyArray(c);
}

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Я не думаю, что это необходимо, и я не пытаюсь очистить такую ​​память по нескольким причинам:

  1. Если вызов функции mxCreate * не удался, это, скорее всего, потому, что у вас недостаточно памяти. В некоторых версиях MEX API это приведет к нарушению сегментации, и у вас все равно не будет возможности выполнить очистку.

  2. MATLAB автоматически уничтожит все массивы, которые не возвращаются из функции MEX в plhs [], когда функция MEX завершается или когда происходит вызов mxErr.

2 голосов
/ 08 февраля 2012

Просто попробуйте и посмотрите, не падает ли Matlab. Я думаю, что вам нужна проверка, как и в простом C, поскольку null не ссылается на действительный адрес памяти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...