Как предложил Баррон, используйте подпрограмму, чтобы облегчить жизнь.Пусть MATLAB выделяет память.
Вот полный рабочий пример использования Intel Fortran 12.1:
subroutine CopyArray(A, B, n)
!DEC$ ATTRIBUTES DLLEXPORT :: CopyArray
!DEC$ ATTRIBUTES ALIAS: 'CopyArray' :: CopyArray
!DEC$ ATTRIBUTES REFERENCE :: A, B
!DEC$ ATTRIBUTES VALUE :: n
real(8), intent(in), dimension(n,n) :: A(n,n)
real(8), intent(out), dimension(n,n) :: B(n,n)
integer, intent(in) :: n
B = A
end subroutine
Заголовочный файл:
void CopyArray(double*, double*, int);
Сценарий MATLAB:
n = 3;
A = rand(n, n);
B = zeros(n, n);
[A2, B2] = calllib(libname, 'CopyArray', A, B, n);
Использование libpointer здесь необязательно.Похоже, что MATLAB автоматически преобразует аргументы массива в указатели.Также обратите внимание, что аргументы, которые передаются по ссылке (A, B), преобразуются в возвращаемые функцией значения в MATLAB.