Utilizzo le routine di rilevamento perdite di memoria di Visual CRT da <crtdbg.h>
; quando chiamo _CrtDumpMemoryLeaks
uno allocazione viene segnalata costantemente ad ogni chiamata del programma:Perché _CrtSetBreakAlloc potrebbe non causare un punto di interruzione?
{133} normal block at 0x04F85628, 56 bytes long.
Data: < > B0 81 F8 04 B0 81 F8 04 B0 81 F8 04 CD CD CD CD
L'indirizzo varia, ma {133}
è sempre lo stesso.
secondo le istruzioni del MSDN su How to set breakpoints on memory allocation number, dovrei essere in grado di impostare un punto di interruzione sulla ripartizione 133i con questa chiamata:
_CrtSetBreakAlloc(133);
e posso verificare anche nella finestra di controllo che {,,msvcr90d.dll}_crtBreakAlloc
è infatti impostato a 133 Dopo l'uscita dal programma, il rapporto di perdita elenca ancora # 133 (insieme ad alcuni numeri più alti), ma non si verifica alcun punto di interruzione. Perché questo potrebbe essere e in che modo si verificherà il punto di interruzione?
informazioni potenzialmente rilevanti:
- VS2008, utilizzando il CRT "multi-threaded di debug DLL"
- Il mio codice è una DLL che viene caricato da un prodotto di terze parti
- punti di interruzione "Normale" funziona bene; passare attraverso funziona bene;
__asm int 3
funziona bene. - Nessun altro valore per
_crtBreakAlloc
provoca un punto di interruzione o (non quelli che ho provato in ogni modo) 133 è il numero più basso nella relazione perdita
Immagino che questo sia il vantaggio di mettere un punto di interruzione all'inizio del tuo programma, quindi impostare {,, msvcr90d.dll} _crtBreakAlloc a 133 invece di chiamare _CrtSetBreakAlloc (133); anche se non sono sicuro che questa osservazione sia applicabile alla tua situazione. :) Ad ogni modo, felice che sia stato risolto. – Gyuri
FYI, un modo facile (e comune) che questo può accadere è se la tua allocazione è statica. Per esempio. hai fatto un 'std :: vector' nell'ambito del file. – imallett