Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
英特尔Visual Fortran固定长度字符串可分配数组_Fortran_Allocation_Intel Fortran_Heap Corruption - Fatal编程技术网

英特尔Visual Fortran固定长度字符串可分配数组

英特尔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",

运行英特尔并行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
在分配
时间期间,代码将在没有堆栈跟踪的情况下崩溃,并且它会告诉我在调试模式下的窗口对话框中发生了堆损坏

我确定
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的评论一样,请参阅。