- ベストアンサー
Fortranコードの疑問
FORTRANのコードに関して教えてください。 いま作っているプログラムを走らせるとCommand terminated abnormally.と言われて途中で止まってしまいます。これは小さな計算(2000格子点)くらいだと上手くいくのですが、16000格子点くらいになるとダメです。これくらいだとメモリ的にもまだまだ余裕があるので、色々と他の理由を探してみましたが万策尽きました・・・ どうやら write(*,*)n…繰り返し数 n=2000 write(*,*)n do i=1,n -- code ----- enddo としたとき、出力は普通、 0 2000 となってDo文を実行すると思うのですが、上記の場合のように大きな(?)計算をさせようとすると、 1081265151 2000 などと、定義してもいないのにとんでもない値がnに代入されてしまうようです。何故このような現象が起こるのかご存知の方がいらっしゃいましたら、どうかご教示頂けると幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
FORTRANの文法を良く思い出せないので自信ないですが、一般論としては初期化していない変数がどんな値を持つかは不定です。 初期値が0になっていることを仮定してコードを書くと嵌まります。 質問の主旨がそういう話でなかったらごめんなさい。
その他の回答 (1)
- ultraCS
- ベストアンサー率44% (3956/8947)
#1の方のおっしゃるとおりです、FORTRANの仕様では、変数の初期値は定められておらず、宣言しただけでは不定です。 実際の処理系によっては、ヌルでクリアされることもありますが、それに頼ったプログラミングはFORTRANに限らず悪い癖ですので直すようにしてください。いままでに、これが動かない原因だったシステムはたくさんあります。 ただし、書かれているコードであれば、それが原因でABENDというようなものには思えません。--code--の部分に別の問題がありそうです。
お礼
これまでの経験では、ヌルでクリアされていたため、気付きませんでした…これからは気をつけるようにします。ありがとうございました!
お礼
全くその通りでした。すべての変数を初期化したところ正常に動作しました。ありがとうございました!