我想知道如何從函數返回一個數組,直到運行時(包括假定的形狀數組)。我會用例子來解釋。這工作函數返回沒有定義顯式形狀的數組
module foo
contains
function getArray(:)
real :: getArray(3)
integer :: i
do i=1,3
getArray(i) = 10.0*i
enddo
end function
end module
program xx
use foo
real :: array(3)
integer :: i
array = getArray()
print *, array
end program
這也適用,因爲它使用自動數組
module foo
contains
function getArray(length)
integer :: length
real :: getArray(length)
integer :: i
do i=1,length
getArray(i) = 10.0*i
enddo
end function
end module
program xx
use foo
real :: array(5)
integer :: i
array = getArray(5)
print *, array
end program
這個怎麼樣的? Fortran有效嗎?我有內存泄漏在這種情況下
module foo
contains
function getArray()
real, allocatable :: getArray(:)
integer :: length
integer :: i
length = 5 ! coming, for example, from disk
allocate(getArray(length))
do i=1,length
getArray(i) = 10.0*i
enddo
! cannot call deallocate() or a crash occurs
end function
end module
use foo
real :: array(5,5) ! get max size from other means, so to have enough space
integer :: i
array = getArray()
! leaking memory here ? unexpected behavior ?
end program
在你的最後一個例子中,getArray有兩個維度,但你將它視爲一維數組。這是爲什麼? – canavanin 2011-01-10 15:24:57