問題:のfread()はValgrindのエラーが発生します。「条件付きジャンプや移動が初期化されていない値(複数可)に依存し、」
ノードvalgrindのから保存されたtext_を取得しようとしたときに作品にデータをロードするが、 "条件付きジャンプ"をスローします。 text_は引き続き正しく検索され、表示されます。問題原因は何
:
これはコードスニペットは、readFileの()関数の一部と、この特定の関数fread(ある)が問題となります。
int readFile(char **text, ...)
...
size_text = filesize - previous_position;
*text = (char *)malloc(size_text + 1);
fread(*text, 1, size_text, input);
Valgrindのメッセージ:
==18139== Conditional jump or move depends on uninitialised value(s)
==18139== at 0x48303C7: __GI_strlen (vg_replace_strmem.c:455)
==18139== by 0x48EA17F: vfprintf (vfprintf.c:1637)
==18139== by 0x48EF955: printf (printf.c:33)
==18139== by 0x108F6A: game (version-3.c:243)
==18139== by 0x109085: main (version-3.c:287)
==18139== Uninitialised value was created by a heap allocation
==18139== at 0x482D27C: malloc (vg_replace_malloc.c:299)
==18139== by 0x108BBC: readFile (version-3.c:125)
==18139== by 0x108D4A: BuildTree (version-3.c:197)
==18139== by 0x109074: main (version-3.c:286)
==18139==
ソリューション
NULL終端の修正このエラーを追加します。 初期の仮定は、すでにヌル終端されていたのは、ヌル終端文字の間違った配置から来たことです。* text [size_text] = '\ 0'; - >スローエラー (* text)[size_text] = '\ 0'; - >エラーを修正します
freadが期待するバイト数を読み込んでいることを確認してください。 size_textバイトが必要です。それはあなたが読んだ金額ですか?あなたがそれ以下を読むなら、このエラーを受けるでしょう – pm100
cos_t size_textを決めるためにいくつか気をつけてください。 – pm100
あなたは 'size_text + 1'バイトを割り当てますが、' fread'で 'size_text'バイトだけを読み込みます。したがって、1バイトは初期化されずに残されます。 – user3386109