Ho un problema durante l'esecuzione di una testcase in modalità debug: viene visualizzata una finestra pop-up con il messaggio "Eccezione non gestita a 0x7c812fd3 in Test.exe: 0xE0000003: 0xe0000003.". Le interruzioni di codice in free.c:C++ Eccezione non gestita - come eseguire il debug
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());
}
}
alla linea "retval = ..." con _crtheap = 0x00df0000 e pBlock = 0x967c93d3. Lo stack di chiamate si interrompe in "kernel32.dll! 7c812fd3()" e un'altra voce più in basso nello stack di chiamate: "> msvcr100d.dll! _free_base (void * pBlock = 0x967c93d3) Riga 50 + 0x13 byte".
Ho cercato su Google un bel po 'e il problema potrebbe derivare dalla liberazione della memoria. Nonostante questa descrizione vaga e disordinata, qualcuno può suggerire come localizzare il problema? e forse come risolverlo?
Quello che mi colpisce un po 'strano è che io non provo questo quando si esegue il test in release-mode ...
Cordiali saluti, Svend
La ragione usuale per gli errori di solo modo di debug sono le variabili non inizializzate. Forse stai liberando un puntatore a cui non è mai stato assegnato un valore. – john
Nella modalità di rilascio questi controlli non vengono eseguiti, quindi perché si ottiene la notifica solo in modalità di debug (il problema esiste ancora nel rilascio, si ha solo la fortuna che non sembra causare ulteriori bug). Vai alla traccia dello stack finché non raggiungi una funzione che hai scritto e prova a capire cosa c'è che non va (ad esempio, raddoppiare o liberare un indirizzo che non è stato effettivamente assegnato). – Cameron
Puoi dare un po 'più di dettaglio? Che tipo di oggetto viene liberato? È un puntatore intelligente ad esempio –