为什么这个可分配数组会导致错误?

问题描述 投票:0回答:1

我不完全理解分配,所以这可能是一个简单的问题,但我写了这个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:分段错误 - 无效的内存引用。”

arrays fortran allocation
1个回答
0
投票

可分配项必须在使用前进行分配,即

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

但是,这种方法在性能方面效率非常低。

© www.soinside.com 2019 - 2024. All rights reserved.