在fortran中,假設未分配數組的狀態爲.not.allocated
,並且如果使用save
屬性聲明可分配數組的狀態在調用之間保留,那麼安全嗎?換句話說,除非輔助輸出格式的差異,是安全的假設,下面的程序將始終導致輸出:分配數組的初始狀態
First time here
Been here before
測試程序:
program main
call sub()
call sub()
end program main
subroutine sub()
real,save,allocatable,dimension(:) :: a
if(.not. allocated(a))then
print*,"First time here"
allocate(a(10))
else
print*,"Been here before"
endif
end subroutine sub
我問,主要是因爲我知道,你不能假定一個指針的默認關聯爲.not.associated
FWIW,沒有'save'程序是非法的Fortran 90,但合法的Fortran 95 – 2013-02-12 19:23:05
@VladimirF - 很有趣。如果該程序會導致它在f90中是非法的? – mgilson 2013-02-13 02:37:03
不確定這是否正確。據我所知,f90和f95之間的變化與此處相關的是,後者指定一旦可分配數組超出範圍,它就會自動釋放。因此,在f90中,你可能會遇到內存泄漏(「可能」,因爲標準沒有禁止沿着f95行重新分配),而在f95中肯定不會。因此,我的讀法是,在F90中,行爲是由實施定義的,由於潛在的內存泄漏,但實際上不合法,因此在f95中所有的都是幸福,甜蜜和光明。 – 2013-02-13 09:01:15