コード内の障害を見つけるために valgrind を使用しています。私が使用するコマンドは
valgrind --leak-check=yes ./a.out
コードのみでコードをコンパイルします-g
。単一の書き込み行を指す多くのエラーが発生します (出力された 3 つの値は初期化され、適切に定義されています)。
write (22,*) avlength, stdlength, avenergy
すべてConditional jump or move depends on uninitialised value(s)
エラーがあります。上記の行は、1 つのファイルに出力される一連の行の 2 行目です。エラーの最後に、さらに 2 つ取得します。1 つはファイルを開く行を指しています。
resStep = int(conf*100/iterate)
if (resStep.lt.10) then
write (resFile, "(A5,I1)") "res00",resStep
elseif (ResStep.lt.100) then
write (resFile, "(A4,I2)") "res0",resStep
else
write (resFile, "(A3,I1)") "res",resStep
endif
open (unit=22,file=trim(resFile),status='replace',
c action='write')
resStep
は整数です。エラーはSyscall param write(buf) points to uninitialised byte(s)
です。最後にAddress 0x52d83f4 is 212 bytes inside a block of size 8,344 alloc'd
、ファイルをフラッシュすると (ファイルを閉じる前に) エラーが発生します。
ここにはロジックが見つかりません。問題が誤った方法でファイルを開くことにある場合、最初の行でエラーが発生しませんか?
これをコンパイルするために f95 を使用します。gcc のバージョンは 4.1.2 です。どれもアップグレードできません。