【发布时间】:2017-03-02 20:10:04
【问题描述】:
有人能解释一下为什么当 ND 很大(1000000)时下面的代码会产生分段错误吗?增加堆栈限制没有帮助。
module parametros_mod
integer, parameter :: ND = 1000000
end module parametros_mod
module data_mod
use parametros_mod
implicit none
private
type, public :: data_vec
real(8) :: f0
real(8), dimension(ND) :: fvec
end type data_vec
end module data_mod
!test program
program test
use parametros_mod
use data_mod
implicit none
type(data_vec) :: v1
real(8), dimension(ND) :: rv, xv
rv = 0d0
rv(2) = 1d0
v1 = data_vec(1.1d0,rv)
xv = v1%fvec
write(*,'(*(f0.4,2x))') xv(1:3)
end program test
【问题讨论】:
-
真的,一定有人在大规模教授
real(8)的东西。它不是来自好的教科书或教程。 -
您的代码在 gfortran 5.3 中不会崩溃。如果它真的对你有用,我会看看
data_vec(1.1d0,rv)表达式,也许它会导致你的编译器产生一个临时对象。告诉我们更多关于您的编译器、编译器标志、操作系统的信息。
标签: segmentation-fault fortran gfortran