На мой вопрос теперь ответили на другом форуме здесь .Ниже дан ответ:
"Вы не можете смешивать собственную память C / C ++ (т. Е. Локальные переменные стека или выделенные переменные с помощью malloc & cousins) в mxArray для возврата в рабочую область MATLAB. Это в конечном итоге приведет ксбой MATLAB, когда он пытается освободить эту память. Таким образом, вы застряли с дублированием этой памяти. Как я вижу, ваши варианты:
1) Перепишите ваш код, чтобы создать структуру C / C ++ с использованием функций MATLAB API mxMalloc& cousins вместо нативных функций C / C ++: malloc & friends. Затем эта память может быть напрямую подключена к структуре mxArray для возврата в рабочую область MATLAB ... дублирование или освобождение не потребуется.
2) Создатьваш фрагмент структуры MATLAB с mxMalloc и двоюродными братьями, когда вы освобождаете фрагмент памяти C / C ++. Это по-прежнему требует временного дублирования самого большого блока, но избавляет вас от дублирования всего в памяти одновременно.
3) Не обращайте внимания на то, что я сказал о смешивании нативного с / к++ память и память MATLAB API.Играйте в игры со взломом mxArray, чтобы смешивать их, сохраняйте копии общих данных в подпрограмме mex, чтобы предотвратить попытки MATLAB освободить память.Это очень сложно и не рекомендуется, так как вы можете легко потерять память и / или вызвать сбой MATLAB, если не все правильно справитесь.
Это не сэкономит вам значительный объем памяти, возвращая несколько отдельных переменных вMATLAB против возврата структуры или массива ячеек, поэтому просто возвращайте все, что проще для создания и управления на основе вашего предполагаемого использования. "-James Tursa