2017-02-06 3 views
0

現在、私のコードは、notepad.exeでテストした3MB未満のPEファイルのエントロピーとファイルオフセットを取得できます。しかし、代わりに大きなファイルを分析しようとするとエラーが表示されます。特定のサイズ以上のPEファイルを解析できません

この問題をどのように解決すればよいかわかりません。しかし、私の講師は私に、同じような別の機能を作ろうと言った。誰かが私を助けることができたら本当に感謝します。 CLIに示す

エラー:

Call to ReadFile() failed. 
Error Code: 998 

エラー部分:

dwFileSize = GetFileSize(hFile, NULL); 
if (dwFileSize != INVALID_FILE_SIZE) 
{ 
    bFile = (byte*)malloc(dwFileSize); 
+1

コードは、返されたバイト*をリークしています。これは永遠に続くわけではありません。最終的に、malloc()はNULLを返して、より多くのメモリを割り当てることができないことを示します。あなたは必然的にReadFile()をチェックしません。 –

+0

お返事ありがとうございます。これを修正するにはどうすればいいのか分かりますか? – Mervin

+1

明白な解決策を検討してください。 free()を呼び出すのと同じです。 x64をターゲットとする –

答えて

2

あなたは、エラーコードが「メモリロケーションへのアクセスが無効です」をデコードし、あなたがの戻り値をチェックしていませんよmallocを使用していても、ReadFileをループして全体を読む必要があります。

メモリが不足しています。あなたは確かにあなたのアルゴリズムを再設計する必要があります。

Hans Passant氏は、ファイルの処理が完了してもファイルのメモリを解放しないため、メモリリークが発生していると指摘しています。 C++はガベージコレクションされません。

+0

C++はガベージコレクトされていませんが、自動メモリ管理を行うスマートポインタとコンテナクラスを持っています。 –

+0

私は主な機能の下で無料で(bFile)を追加しました。しかし、メモリが漏れていないことを保証するためにポインタコードをどのように編集すべきかわかりません。 – Mervin

+0

これは動作しますが、大きなファイルを分析する場合は数秒かかることがあります。とにかく、ありがとう :) – Mervin

関連する問題