Mam problem podczas uruchamiania testcase w trybie debugowania: Otrzymuję wyskakujące okienko z komunikatem "Nieobsługiwany wyjątek przy 0x7c812fd3 w Test.exe: 0xE0000003: 0xe0000003.". Przerwy kodowe w free.c:C++ Nieobsługiwany wyjątek - jak debugować
void __cdecl _free_base (void * pBlock)
{
int retval = 0;
if (pBlock == NULL)
return;
RTCCALLBACK(_RTC_Free_hook, (pBlock, 0));
retval = HeapFree(_crtheap, 0, pBlock);
if (retval == 0)
{
errno = _get_errno_from_oserr(GetLastError());
}
}
w wierszu "retval = ..." z _crtheap = 0x00df0000 i pBlock = 0x967c93d3. Stos wywołań rozbija się na "kernel32.dll! 7c812fd3()" i kolejny wpis w dalszej części stosu wywołań: "> msvcr100d.dll! _free_base (void * pBlock = 0x967c93d3) Linia 50 + 0x13 bajtów".
Mam dość google i problem może wynikać z uwolnienia razy w pamięci. Pomimo tego niejasnego i nieuporządkowanego opisu, każdy może wskazać, jak zlokalizować problem? i może to naprawić?
Co wydaje mi się nieco dziwne jest to, że nie doświadczają tego po uruchomieniu testu uwalniania trybie ...
pozdrowienia rodzaju, Svend
Zwykle powodem błędów w trybie debugowania są niezainicjalizowane zmienne. Być może uwalniasz wskaźnik, który nigdy nie otrzymał żadnej wartości. – john
W trybie zwolnienia te kontrole nie są wykonywane, dlatego powinieneś otrzymywać powiadomienia tylko w trybie debugowania (problem nadal występuje w wersji, po prostu masz szczęście, że nie powoduje żadnych dalszych błędów). Przejdź do śledzenia stosu, aż dojdziesz do funkcji, którą napisałeś, i spróbuj odgadnąć, co jest nie tak (np. Podwójnie uwolnić lub zwolnić adres, który nie został przydzielony). – Cameron
Czy możesz podać nieco więcej szczegółów? Jaki przedmiot zostaje uwolniony? Czy jest to inteligentny wskaźnik np. –