夏が終わったと感じる瞬間って、どんな時?

FORTRANのコードに関して教えてください。

いま作っているプログラムを走らせるとCommand terminated abnormally.と言われて途中で止まってしまいます。これは小さな計算(2000格子点)くらいだと上手くいくのですが、16000格子点くらいになるとダメです。これくらいだとメモリ的にもまだまだ余裕があるので、色々と他の理由を探してみましたが万策尽きました・・・ どうやら

write(*,*)n…繰り返し数
n=2000
write(*,*)n
do i=1,n
-- code -----
enddo

としたとき、出力は普通、
0
2000
となってDo文を実行すると思うのですが、上記の場合のように大きな(?)計算をさせようとすると、
1081265151
2000
などと、定義してもいないのにとんでもない値がnに代入されてしまうようです。何故このような現象が起こるのかご存知の方がいらっしゃいましたら、どうかご教示頂けると幸いです。

A 回答 (2件)

FORTRANの文法を良く思い出せないので自信ないですが、一般論としては初期化していない変数がどんな値を持つかは不定です。


初期値が0になっていることを仮定してコードを書くと嵌まります。

質問の主旨がそういう話でなかったらごめんなさい。
    • good
    • 0
この回答へのお礼

全くその通りでした。すべての変数を初期化したところ正常に動作しました。ありがとうございました!

お礼日時:2005/07/05 10:50

#1の方のおっしゃるとおりです、FORTRANの仕様では、変数の初期値は定められておらず、宣言しただけでは不定です。


実際の処理系によっては、ヌルでクリアされることもありますが、それに頼ったプログラミングはFORTRANに限らず悪い癖ですので直すようにしてください。いままでに、これが動かない原因だったシステムはたくさんあります。

ただし、書かれているコードであれば、それが原因でABENDというようなものには思えません。--code--の部分に別の問題がありそうです。
    • good
    • 0
この回答へのお礼

これまでの経験では、ヌルでクリアされていたため、気付きませんでした…これからは気をつけるようにします。ありがとうございました!

お礼日時:2005/07/05 10:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!