取消分配导致程序停止,没有错误消息

时间:2020-11-08 10:37:07

标签: fortran allocatable-array

我正在用Brian Hahn的《 Fortran 90 for Scientists and Engineers 》(Fortran 90版)学习Fortran。在第131/132页有关数组的第9章中,他给出了以下代码作为动态数组的示例

Program Chap_9_Allocatable_Array

Implicit none

! Variables
Real, dimension(:), Allocatable    :: X, OldX
Real                                  A
Integer                               IO, N, i

! Body of Chap_9_Allocatable_Array
Allocate( X(0) )                   !Size zero to sart with?
N = 0
Open(1, File = 'Data.txt')

Do
    Read(1, *, IOStat = IO) A
    If (IO < 0) Exit
    N = N + 1
    Allocate( OldX( Size(X) ) )
    OldX = X                       !Entire array can be assigned
    Deallocate( X )
    Allocate( X(N) )
    X = OldX
    X(N) = A
    Deallocate( OldX )
End do

Print *, (X(i), i = 1, N)

End program Chap_9_Allocatable_Array

我已使用Intel Visual Fortran编译器在Visual Studio Community 2019中实现了此程序。他解释说,该计划的目的是

以下程序摘录显示了如何使用可分配数组来调用这些野兽,以读取未知数量的数据,不幸的是,由于READ的工作方式,每行必须提供一项

我发现了一个有趣的错误。文件data.txt由100个随机数组成,每行1个。当我尝试运行它时,它似乎停滞了几秒钟,然后控制台只打印了

按任意键继续。

提示,没有错误消息。我已插入一些调试打印文件,并确定程序在停止之前运行do循环3至8次。我无法确定原因。如果然后将data.txt文件更改为仅3个数字长,则程序将按预期运行。通过调试打印,我将错误固定为

Deallocate( X )

行。如果我在Visual Studio中调试程序,则只会收到以下消息:

Chap_9_Allocatable_Array.exe触发了一个断点。

这本书有一些小错误。仅在此示例中,作者似乎忘记了声明 i ,这导致了编译错误。但是,由于我只是想了解数组,因此我不知道还要尝试什么。有什么想法吗?

0 个答案:

没有答案