我不完全理解分配,所以这可能是一个简单的问题,但我写了这个Fortran代码:
program name
implicit none
integer :: A, B
integer, dimension(:), allocatable :: ARR
do A = 1, 100
ARR(A) = A*2
end do
do B = 1, 100
print "(i5)", ARR(A)
end do
end program name
它给了我一个记忆错误。
代码应该为可分配数组分配 100 个值,每个值等于其索引号的平方,然后打印每个值。相反,它给了我一条错误消息:“程序收到信号 SIGSEGV:分段错误 - 无效的内存引用。”
可分配项必须在使用前进行分配,即
allocate( arr(100) )
do A = 1, 100
...
或者在这种特殊情况下,您可以使用数组构造函数和分配分配功能来替换第一个循环:
ARR = [ (A*2, A=1,100) ]
最后,您可以逐个元素地使用分配时重新分配功能。该数组最初必须分配一个空数组:
allocate( ARR(0) ) ! or ARR = [integer::]
do A = 1, 100
ARR = [ ARR, A ]
end do
但是,这种方法在性能方面效率非常低。