He tenido problemas al intentar rastrear una Infracción de acceso en mi programa. Ocurre cuando se llama al destructor por tercera vez, exactamente cuando el destructor parece terminar.C++ ¿Algún consejo sobre cómo rastrear las violaciones de acceso?
He pasado horas intentando rastrear esto, así que estoy buscando más consejos sobre lo que puedo hacer. Estoy creando la instancia de clase con los operadores new
y delete
. La ventana de resultados de Visual Studio muestra:
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.
¿Hay algo que pueda hacer para tratar de averiguar lo que había en esos lugares de memoria?
La ventana de pila de llamadas muestra los siguientes (en orden inverso al que he pegado en el orden cronológico, más temprano que tarde):
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() Línea 214 + 0x5 bytes C++
Mi mejor estimación es que existe algún tipo de variable de cadena que causa el problema? ¿Alguien tiene algún consejo sobre la interpretación de esta información?
Cualquier otro consejo también sería útil, gracias de antemano.
Estoy codificando bajo Windows 7 y usando Visual Studio 2010 Professional.
[valgrind] (http://valgrind.org/) – dasblinkenlight
0xABABABAB es utilizado por HeapAlloc como bytes de guardia. Usted puede estar corrompiendo la memoria en alguna parte. http://asawicki.info/news_1292_magic_numbers_in_visual_c.html –
@dasblinkenlight Tan genial como es Valgrind, no es compatible con Windows. – cgmb