2017-12-07 5 views
1

このコードがセグメンテーション違反を生成しない理由はわかりません。コードをコンパイルするときや実行時にいくつかのエラーが予想されていましたが、明らかに正しく実行されます。割り当て可能な配列へのアクセスの範囲外がエラーを引き起こすのはなぜですか?

program alloc 

implicit none 

real, dimension(:,:), allocatable :: myVec 

allocate(myVec(3,2))  

myVec=1. 

myVec(100,3)=10. 

write(*,*) myVec(1,1) 

return 
end 

誰かがこの現象について少し気をつけてもらえますか?

答えて

1

gfortranでは、この種のエラーを探すために-fbounds-checkコンパイラフラグ(または-Cifort)を使用できます。このオプションを使用してあなたの例をコンパイルすると、プログラムが生成する:プログラムがすぐにクラッシュしない理由として

Fortran runtime error: Index '3' of dimension 2 of array 'myvec' above upper bound of 2 

を、このquestionは、より多くの詳細が含まれています。

+0

ありがとう、それはmpifortと同じですか? – alie

+0

mpifortはコンパイラの周りのラッパーで、同じです –

関連する問題