Mam problemy podczas próby wykrycia naruszenia zasad dostępu w moim programie. Występuje, gdy destruktor jest wywoływany po raz trzeci, dokładnie wtedy, gdy destruktor wydaje się kończyć.C++ Wszelkie porady dotyczące śledzenia naruszeń dostępu?
Spędziłem wiele godzin próbując to sprawdzić, więc szukam dalszych porad na temat tego, co mogę zrobić. Tworzę instancję klasy z operatorami new
i delete
. Okno wyjściowe Visual Studio pokazuje:
First-chance exception at 0x60e3ad84 (msvcp100d.dll) in WebCollationAgent.exe: 0xC0000005: Access violation writing location 0xabababab. Unhandled exception at 0x60e3ad84 (msvcp100d.dll) in WebCollationAgent.exe: 0xC0000005: Access violation writing location 0xabababab.
Czy mogę coś zrobić, aby spróbować dowiedzieć się, co było w tych miejscach pamięci?
Okno stosu wywołań pokazuje następujący (w odwrotnej kolejności jak już wklejony go do porządku chronologicznym, najwcześniej do najnowszego):
Program.exe!Network::`scalar deleting destructor'() + 0x2b bytes C++
Program.exe!std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::~basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >() Line 754 + 0xf bytes C++
Program.exe!std::_String_val<wchar_t,std::allocator<wchar_t> >::~_String_val<wchar_t,std::allocator<wchar_t> >() Line 478 + 0xb bytes C++
msvcp100d.dll std :: _ Container_base12 :: _Orphan_all() Linia 214 + 0x5 bajtów C++
Według mojej najlepszej opinii na temat tej informacji istnieje jakiś rodzaj zmiennej łańcuchowej powodującej problem? Czy ktoś ma jakieś porady dotyczące interpretacji tych informacji?
Wszelkie inne porady również byłyby przydatne, z góry dziękuję.
Kodowanie pod Windows 7 i przy użyciu Visual Studio 2010 Professional.
[valgrind] (http://valgrind.org/) – dasblinkenlight
0xABABABAB jest używany przez HeapAlloc jako bajt strażnika. Być może gdzieś masz gdzieś uszkodzić pamięć. http://asawicki.info/news_1292_magic_numbers_in_visual_c.html –
@dasblinkenlight Podobnie jak Valgrind, nie obsługuje systemu Windows. – cgmb