运行Intel Parallel Studio 2015和Visual Studio 2012.启用Fortran 2003兼容性。
以下代码是否存在问题,因为它在我的计算机上造成了一个非常混乱(至少对我来说)堆损坏错误,并且我试图找出它是否是我无法正确理解的东西或编译器错误。
character(len=200), dimension(:), allocatable :: inFNs
real*8, dimension(:), allocatable :: times
inFNs = (/ "file1.dat", "file2.dat", &
"file3.dat", "file4.dat", &
"file5.dat", "file6.dat" /)
allocate(times(SIZE(inFNs))
!more code below
在times
的分配过程中代码会在没有堆栈跟踪的情况下崩溃,它会告诉我在调试模式下窗口对话框中发生了堆损坏。
我确定inFNs
存在问题的方式是因为如果我将times
分配移到inFNs
以上,则会在稍后的分配调用期间发生此问题。
通过将申报行更改为:
,错误似乎消失了(敲木头)character(len=:), dimension(:), allocatable :: inFNs
在我确定之前,我正在对我的代码中的另一个问题进行排序。
回答重复问题:
这与建议的问题不重复,原因很多,我对标记感到困惑。这个问题特别涉及可分配字符数组数组的语法,而不是一般的可分配数组。这个问题涉及英特尔Visual Fortran的潜在编译器错误,而另一个是关于英特尔Fortran和gFortran之间差异的问题。这个问题在尝试使用单独的数组时处理静默崩溃和堆损坏,而另一个处理在操作之后是否认为有问题的数组被分配。
更为重要的是,第二个问题的答案与此问题中的问题无关,因为该选项被打开或关闭不会影响所提出的问题。
说这两个问题是相同的,就像说我遇到了以下代码崩溃
real :: number
number = 4.d0
并且有人问另一个问题,询问为什么以下
存在问题real :: number
number = 4
call add3ToDouble(number)
subroutine add3ToDouble(a)
real*8 :: a
a = a + 3.d0
end subroutine add3ToDouble
并且说答案都是“因为ifort默认为真实(kind = 4)”