英特尔Visual Fortran固定长度字符串可分配数组
运行英特尔并行Studio 2015和Visual Studio 2012。Fortran 2003兼容性已打开 下面的代码是否有问题,因为它在我的机器上导致了一个非常混乱(至少对我来说)的堆损坏错误,我正在试图找出这是我没有正确理解的东西还是编译器错误英特尔Visual Fortran固定长度字符串可分配数组,fortran,allocation,intel-fortran,heap-corruption,Fortran,Allocation,Intel Fortran,Heap Corruption,运行英特尔并行Studio 2015和Visual Studio 2012。Fortran 2003兼容性已打开 下面的代码是否有问题,因为它在我的机器上导致了一个非常混乱(至少对我来说)的堆损坏错误,我正在试图找出这是我没有正确理解的东西还是编译器错误 character(len=200), dimension(:), allocatable :: inFNs real*8, dimension(:), allocatable :: times inFNs = (/ "file1.dat",
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
在分配时间期间,代码将在没有堆栈跟踪的情况下崩溃,并且它会告诉我在调试模式下的窗口对话框中发生了堆损坏
我确定inFNs
存在问题的方法是,如果我将时间
分配移到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默认为real(kind=4)”对不起,输入错误。我会解决的。有问题的打字错误*不是代码。可能只是编译器的问题。当您尝试使用当前版本时会发生什么情况?在上面的代码片段中,您在指定其值之前没有分配inFNs
,因此size(inFNs)
未定义。。。如果您在之前添加allocate(inFNs(6))
会发生什么?就像Ed Smith的评论一样,请参阅。对不起,输入错误。我会解决的。有问题的打字错误*不是代码。可能只是编译器的问题。当您尝试使用当前版本时会发生什么情况?在上面的代码片段中,您在指定其值之前没有分配inFNs
,因此size(inFNs)
未定义。。。如果您在前面添加allocate(inFNs(6))
会发生什么?正如Ed Smith的评论一样,请参阅。