Fortranは、割り当てられていない配列はすでに割り当てられていると見なします

干支

私は次の問題に直面していて、何が起こっているのか理解できません。

コードの先頭にいくつかの作業配列を割り当てるルーチンがあります。これらの作業配列はデータ構造の一部です。

構造は次のように定義されます。

 Type bond_stat
  Real*8,Allocatable,Dimension( : , : ) ::data_space
  Real*8,Allocatable,Dimension( : , : ) ::data_time
  Real*8,Allocatable,Dimension( : )     ::bin_width         
  Real*8,Allocatable,Dimension( : )     ::time
  Integer,Allocatable,Dimension( : , : )  ::connection_table
 End Type bond_stat
 Type( bond_stat ),allocatable,dimension( : ) ::Hbonds

これはモジュール内で行われます。私がしている次のステップは、この構造を次のように割り当てることです。

Allocate( Hbonds( 1:2 ) )

次に、構造体に含まれている配列が割り当てられるサブルーチンを呼び出します。奇妙なことに、配列を次のように割り当てようとすると、

 Allocate( Hbonds( i )%data_space( 1 : 3 , 1 : Nbins ) )
 Allocate( Hbonds( i )%data_time( 1 : 1 , 1 : Nbins ) )
 Allocate( Hbonds( i )%time( 1 : N ) )
 Allocate( Hbonds( i )%bin_width( 1 : 2 ) )
 Allocate( Hbonds( i )%connection_table( 1 : 2 , 1 : N ) ) )

そうすると、実行中にコードが状態を示します。たとえば、時間配列はすでに割り当てられています。以前にこの配列を割り当てなかったことを100%確信しています。また、配列は以前は使用されていなかったと確信しており、すでに使用されているため、コンパイラが配列を割り当てている可能性があります。そのため、配列がすでに割り当てられているかどうかを確認し、割り当てられている場合は、割り当てを解除して再割り当てすることを考えました。そうすると、割り当て解除ラインでセグメンテーション違反が発生します。

    If ( Allocated( Hbonds( i )%time ) ) then
       Deallocate( Hbonds( i )%time )
    End If
    Allocate( Hbonds( i )%time( 1 : N ) )

私はここで何が起こっているのか完全に戸惑っています。誰でも助けてください。出力は次のようになります。

Program received signal SIGSEGV: Segmentation fault - invalid memory 
reference.
Backtrace for this error:
#0  0x2b54685d3f0d in ???
#1  0x2b54685d314d in ???
#2  0x2b5468e4acaf in ???
#3  0x2b5468e9715c in ???
#4  0x4d27cf in __bond_statistics_MOD_bond_stat_init
at/fs/home/jona/programs/gfortran/eval_new01/playground/H_bond_analysis.f90:35
#5  0x4c8f5f in __bond_statistics_MOD_prep_bond_stat
at/fs/home/jona/programs/gfortran/eval_new01/playground/H_bond_analysis.f90:
350
#6  0x44477a in ???
#7  0x446724 in ???
#8  0x2b5468e35f44 in ???
#9  0x4016c8 in ???
#10  0xffffffffffffffff in ???
Segmentation fault (core dumped)

そして、次のようになる前に配列の割り当てを解除しようとしない場合:

At line 38 of file H_bond_analysis.f90
Fortran runtime error: Attempting to allocate already allocated variable 'hbonds'
Error termination. Backtrace:
#0  0x2ae8991bef0d in ???
#1  0x2ae8991bfa45 in ???
#2  0x2ae8991bfdfa in ???
#3  0x4d28e5 in __bond_statistics_MOD_bond_stat_init
at/fs/home/jona/programs/gfortran/eval_new01/playground/H_bond_analysis.f90:38
#4  0x4c8f5f in __bond_statistics_MOD_prep_bond_stat
at/fs/home/jona/programs/gfortran/eval_new01/playground/H_bond_analysis.f90:350
#5  0x44477a in ???
#6  0x446724 in ???
#7  0x2ae899a20f44 in ???
#8  0x4016c8 in ???
#9  0xffffffffffffffff in ???

38行目が時間が割り当てられている行です。フラグ付きのgfortranコンパイラを使用していますFLAGS = -fopenmp -g -Wall -fcheck = all -fbounds-check

干支

私は今、問題がどこにあるのかを理解しました。私はmakefileを使用してコードをコンパイルしています。今日、bond_statモジュールにさらにいくつかの配列を追加したかったのですが、makefileを実行した後、同じエラーが再び発生しました。私が今やったことは、コード自体を何も変更せずに、すべてのモジュールを手動で再コンパイルすることです。これで問題は解決しました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

forrtl:重大(151):割り当て可能な配列はすでに割り当てられています-

分類Dev

配列の割り当てに割り当てられていない割り当て可能な配列を使用する

分類Dev

配列が割り当てられている場合、{{}}が変数に割り当てられたフィールドを表示しないのはなぜですか?

分類Dev

配列をpandasDataFrame列に割り当てられないのはなぜですか?

分類Dev

配列がIterableに割り当てられないのはなぜですか?

分類Dev

動的に割り当てられたchar配列は、コンストラクターで初期化されていないものとして表示されます

分類Dev

空の配列を列挙してもヒープに割り当てられないのはなぜですか?

分類Dev

Fortranの割り当てられていない配列

分類Dev

2番目の要素が押されることになっている場合、jsonキーには配列ではなく番号が割り当てられます

分類Dev

forrtl:severe(151)割り当て可能配列はすでに割り当てられています

分類Dev

正しい構造のTypescript配列が、一見互換性のあるタプルに割り当てられないのはなぜですか

分類Dev

Valgrindは、動的配列にアクセスしようとするとメモリが割り当てられないと言います

分類Dev

Torchがすでに割り当てられているCUDAアレイを台無しにしないという保証はありますか?

分類Dev

TypeError:配列には一貫した型が割り当てられている必要があります

分類Dev

リターンが割り当てられていない場合、動的配列を削除または割り当て解除する必要がありますか?それとも関数によって削除されますか?

分類Dev

列挙値に0.0を割り当てられますが、1.0は割り当てられないのはなぜですか

分類Dev

Pythonで割り当てられていない文字列はどのようにしてメモリにアドレスを持つことができますか?

分類Dev

NSMutableArrayの__NSCFStringは、割り当てられている関数の外ではnilになります

分類Dev

NSMutableArrayの__NSCFStringは、割り当てられている関数の外ではnilになります

分類Dev

SQLで割り当てられていないIDを表示するにはどうすればよいですか?

分類Dev

Java 2D配列、想定されている値ではなく、ランダムな値が割り当てられています

分類Dev

TFS、自分に割り当てられている、または割り当てられていない作業項目を検索する

分類Dev

ヒープポインタが配列に割り当てられない理由はありますか?

分類Dev

一見同一に見える2つの動的配列タイプが割り当て互換ではないと見なされるのはなぜですか?

分類Dev

配列からランダムな文字列を選択して変数に割り当てるにはどうすればよいですか?

分類Dev

Goのマップ内の配列に割り当てられないのはなぜですか?

分類Dev

配列のアドレスをポインタに割り当てられないのはなぜですか?

分類Dev

配列がwdataに値を割り当てられないのはなぜですか?

分類Dev

nullに割り当てられた変数と割り当てられていない他の変数の違いは何ですか

Related 関連記事

  1. 1

    forrtl:重大(151):割り当て可能な配列はすでに割り当てられています-

  2. 2

    配列の割り当てに割り当てられていない割り当て可能な配列を使用する

  3. 3

    配列が割り当てられている場合、{{}}が変数に割り当てられたフィールドを表示しないのはなぜですか?

  4. 4

    配列をpandasDataFrame列に割り当てられないのはなぜですか?

  5. 5

    配列がIterableに割り当てられないのはなぜですか?

  6. 6

    動的に割り当てられたchar配列は、コンストラクターで初期化されていないものとして表示されます

  7. 7

    空の配列を列挙してもヒープに割り当てられないのはなぜですか?

  8. 8

    Fortranの割り当てられていない配列

  9. 9

    2番目の要素が押されることになっている場合、jsonキーには配列ではなく番号が割り当てられます

  10. 10

    forrtl:severe(151)割り当て可能配列はすでに割り当てられています

  11. 11

    正しい構造のTypescript配列が、一見互換性のあるタプルに割り当てられないのはなぜですか

  12. 12

    Valgrindは、動的配列にアクセスしようとするとメモリが割り当てられないと言います

  13. 13

    Torchがすでに割り当てられているCUDAアレイを台無しにしないという保証はありますか?

  14. 14

    TypeError:配列には一貫した型が割り当てられている必要があります

  15. 15

    リターンが割り当てられていない場合、動的配列を削除または割り当て解除する必要がありますか?それとも関数によって削除されますか?

  16. 16

    列挙値に0.0を割り当てられますが、1.0は割り当てられないのはなぜですか

  17. 17

    Pythonで割り当てられていない文字列はどのようにしてメモリにアドレスを持つことができますか?

  18. 18

    NSMutableArrayの__NSCFStringは、割り当てられている関数の外ではnilになります

  19. 19

    NSMutableArrayの__NSCFStringは、割り当てられている関数の外ではnilになります

  20. 20

    SQLで割り当てられていないIDを表示するにはどうすればよいですか?

  21. 21

    Java 2D配列、想定されている値ではなく、ランダムな値が割り当てられています

  22. 22

    TFS、自分に割り当てられている、または割り当てられていない作業項目を検索する

  23. 23

    ヒープポインタが配列に割り当てられない理由はありますか?

  24. 24

    一見同一に見える2つの動的配列タイプが割り当て互換ではないと見なされるのはなぜですか?

  25. 25

    配列からランダムな文字列を選択して変数に割り当てるにはどうすればよいですか?

  26. 26

    Goのマップ内の配列に割り当てられないのはなぜですか?

  27. 27

    配列のアドレスをポインタに割り当てられないのはなぜですか?

  28. 28

    配列がwdataに値を割り当てられないのはなぜですか?

  29. 29

    nullに割り当てられた変数と割り当てられていない他の変数の違いは何ですか

ホットタグ

アーカイブ