为何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
相关产品推荐
相关产品推荐

