2016-07-18 12 views
1

ファイルからデータを読み込むためのバッファを操作するために、vector :: resize、vector :: reserve、およびmemcopy操作を多く使用するプログラムを少し変更しました。私は単体テストをLinux上で走らせていましたが、色が飛んできましたが、Windowsマシンで同じテストを実行したところ、memory access violation occurred at address 0x0038e000, while attempting to read inaccessible dataが表示されています。C++のウィンドウ固有のメモリ問題を診断する方法

メモリリークや問題を検出するために私のプログラムに対してValgrindを実行しましたが、「すべてのヒープブロックが解放され、リークは発生しません」と返されました。

Windowsのメモリエラーの原因を突き止めるにはどうすればいいですか?

ありがとうございます!

+1

valgrindは必要ありません。デバッガが必要です。このエラーを引き起こすコードの行を探し、ここから作業します。 –

+0

プログラムの障害がコール履歴/スタックフレームを検査すると、デバッガで実行されます。 –

+0

[アドレスサニタイザー](http://clang.llvm.org/docs/AddressSanitizer.html) –

答えて

2

全ページヒープを試してみると、何度も助けてくれました。

https://msdn.microsoft.com/en-us/library/windows/hardware/ff549561(v=vs.85).aspx

+0

でプログラムをビルドしてみてください。 Windowsには、実際のデバッグ機能が備わっています(使用方法がわかっている場合)。幸運なことに、Microsoft Pressは、Tarik SoulamiのWindows Debugging _の中で、最も重要なツールのいくつかを紹介しています。 – ComicSansMS

関連する問題