現在、関数fscanfを使用して、charとfloatポイントのファイルを解析しています。結果を印刷し、valgrindでメモリチェックしました。 今、印刷は正しいですが、常にの間違いなくメモリが失われています()。C関数fscanf(メモリ損失あり)
これはサンプルコードです:
FILE* table;
table = fopen("table", "r");
double mass;
while (fscanf(table, %lf ", &mass) != EOF){
printf("mass: %lf\n", mass);
}
と--leak-check=full
オプションとvalgrindのは言う:
==7104== 513 bytes in 1 blocks are definitely lost in loss record 52 of 62
==7104== at 0x100008EBB: malloc (in /usr/local/Cellar/valgrind/3.11.0/lib/valgrind/vgpreload_memcheck-amd64-darwin.so)
==7104== by 0x1001EF66C: __parsefloat_buf (in /usr/lib/system/libsystem_c.dylib)
==7104== by 0x1001ED9EF: __svfscanf_l (in /usr/lib/system/libsystem_c.dylib)
==7104== by 0x1001E1492: fscanf (in /usr/lib/system/libsystem_c.dylib)
==7104== by 0x100000F3F: main (in ./prtm)
は、私はそれは形式の問題だと思います。私も%f
とfloat
を使用しようとしましたが、もっと似たようなエラーが出ます。 誰かが間違っていることを教えてもらえますか?
あなたはファイルを閉じないでください。 – 2501
これをおそらく関連する理由として排除するだけです。欠落している 'fclose'の追加メモリ損失レポートを取得しますか? (asはhttp://stackoverflow.com/q/31630583/2564301に従って報告する必要があります)そして、ファイルを適切に閉じると、このファイルは消えませんか? – usr2564301
'valgrind'を実行し、あなたのコードが明示的にメモリを割り当てていないのに、' valgrind'が終了時にメモリを使用していると報告している場合は、 'fopen'のように、つかいます。メモリを割り当てずに追加のライブラリ関数を呼び出さなくても、終了時に 'valgrind'報告メモリが使用中に残っている場合は、正しい*除外*ファイルが' valgrind'のあなたのバージョンで利用できません現在実行しているOSそれは起こる、ちょうどそれらのMacを実行してください。 –