1

Visual Leak Detector を使用して Visual Studio 10.0 で Visual C++ プログラムを実行すると、出力画面に次の結果が表示されます。

{359} normal block at 0x00000000012FFF30, 16 bytes long
 Data: <                > D8 0F 94 E4 F7 07 00 00 00 00 00 00 00 00 00 00 

これは出力の行の 1 つです。誰か 1 がこれを分析する方法を教えてくれたり、e1 が意味することを教えてくれたりすると、大きな助けになるでしょう。また、リークの開始時に次の行も取得します。

 Call Stack:
    c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory (36): Dual OS.exe!std::_Allocate<std::_Container_proxy> + 0x22 bytes
    c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory (188): Dual OS.exe!std::allocator<std::_Container_proxy>::allocate
    c:\program files (x86)\microsoft visual studio 10.0\vc\include\xstring (469): Dual OS.exe!std::_String_val<char,std::allocator<char> >::_String_val<char,std::allocator<char> > + 0xF bytes
    c:\program files (x86)\microsoft visual studio 10.0\vc\include\xstring (550): Dual OS.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> > + 0x33 bytes
    c:\users\parthkumars\desktop\dualos\duos\duosdlg.cpp (385): Dual OS.exe!CDUOSDlg::CDUOSDlg + 0xA2 bytes
    c:\users\parthkumars\desktop\dualos\duos\duos.cpp (39): Dual OS.exe!`dynamic initializer for 'dlg'' + 0x12 bytes
    0x0000000014510E94 (File and line number not available): (Module name unavailable)!(Function name unavailable)
  Data:
    D0 0C 94 E4    F7 07 00 00    00 00 00 00    00 00 00 00     ........ ........


---------- Block 2 at 0x00000000012FFA40: 16 bytes ----------
  Call Stack:
    c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory (36): Dual OS.exe!std::_Allocate<std::_Container_proxy> + 0x22 bytes
    c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory (188): Dual OS.exe!std::allocator<std::_Container_proxy>::allocate
    c:\program files (x86)\microsoft visual studio 10.0\vc\include\vector (442): Dual OS.exe!std::_Vector_val<std::pair<unsigned long,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<unsigned long,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > >::_Vector_val<std::pair<unsign + 0xF bytes
    c:\program files (x86)\microsoft visual studio 10.0\vc\include\vector (507): Dual OS.exe!std::vector<std::pair<unsigned long,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<unsigned long,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > >::vector<std::pair<unsigned long,st + 0x33 bytes
    c:\users\parthkumars\desktop\dualos\duos\eventdispatcher.h (19): Dual OS.exe!CEventDispatcher::CEventDispatcher + 0x3D bytes
    c:\users\parthkumars\desktop\dualos\duos\duosdlg.cpp (385): Dual OS.exe!CDUOSDlg::CDUOSDlg + 0x149 bytes
    c:\users\parthkumars\desktop\dualos\duos\duos.cpp (39): Dual OS.exe!`dynamic initializer for 'dlg'' + 0x12 bytes
    0x0000000014510E94 (File and line number not available): (Module name unavailable)!(Function name unavailable)
  Data:
    88 0D 94 E4    F7 07 00 00    00 00 00 00    00 00 00 00     ........ ........
4

2 に答える 2

0

出力は基本的に、プログラムがメモリを割り当てたが、終了する前に解放しなかったことを示しています。

最初の出力は、メモリに含まれているデータの量と内容を示しています。

コール スタックは、メモリが割り当てられた場所を示します。

于 2013-09-05T05:58:33.903 に答える
0

CEventDispatcher コンストラクターを調べてください。現在削除されているペアの std::vector の新しいものを見つける必要があります (配置する正しい場所は dtor である可能性があります)。

私にとって、そのレポで重要なのはコールスタックです。それは割り当てポイントを示し、後でデバッガを習得すれば、関数アドレスとオフセットを使用できるようになります!

于 2013-09-05T06:43:21.903 に答える