You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Fortran中的allocatable array会引发内存错误?

问题原因分析

1. 可分配数组未分配内存

你声明的integer, dimension(:), allocatable :: ARR是可分配数组,这类数组必须先通过allocate语句指定内存大小,才能访问或赋值元素。代码里直接用ARR(A)赋值,相当于访问未分配的内存空间,这是触发段错误的核心原因。

2. 打印循环的索引错误

第一个do循环结束后,循环变量A的值会变为101(Fortran循环结束后,变量会超出循环终值)。第二个循环里你用ARR(A),也就是访问ARR(101)——即使数组分配了100个元素,这也属于越界访问,同样会引发内存错误。而且你的本意是打印每个元素,应该用循环变量B来访问对应位置的ARR(B)。

3. 赋值逻辑与需求不符

你提到要给元素赋值为索引的平方,但代码里写的是ARR(A) = A*2,这会赋值为索引的2倍,若要实现平方逻辑,应该改为A**2。

修正后的代码示例
program name
    implicit none
    integer :: A, B
    integer, dimension(:), allocatable :: ARR
    
    ! 为可分配数组分配100个元素的内存
    allocate(ARR(1:100))
    
    do A = 1, 100
        ARR(A) = A**2  ! 修正为平方赋值逻辑
    end do
    
    do B = 1, 100
        print "(i5)", ARR(B)  ! 用循环变量B访问对应元素
    end do
    
    ! 可分配数组使用完毕后释放内存(可选,程序结束时会自动释放)
    deallocate(ARR)
end program name

内容的提问来源于stack exchange,提问作者JoeTheGreatest616

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:48:18