Мне нужно вызвать некоторый код Fortran, который динамически распределяет массивы, как в этом базовом примере. (в отличие от этого примера в коде, с которым я работаю, размер массива неизвестен в начале функции)
subroutine getIdentity(n,I)
integer, intent(in) :: n
integer, allocatable,dimension(:,:), intent(out) :: I
integer :: j,k
write(*,*) "creating " ,n, "x", n, "identity matrix"
allocate(I(n,n))
do j=1,n
do k=1,n
if(k==j) then
I(j,k) = 1
else
I(j,k) = 0
end if
end do
end do
end subroutine getIdentity
Когда я звоню с этим кодом Джулии:
I = zeros(Int32,1,1)
n = Ref{Int32}(3)
ccall((:__myModule_MOD_getidentity,"./test.so"), Cvoid ,
(Ref{Int32},Ref{Int32}), n,I)
println(I)
Когда я смотрю на себя в Джулии, это просто мусор, а не матрица идентичности, которую я ожидал бы. Как правильно это сделать?