Condividi tramite


Versioni di debug di funzioni di allocazione heap

Le informazioni contenute in questo argomento sono valide per:

Edizione

Visual Basic

C#

F#

C++

Web Developer

Express

Argomento non applicabile Argomento non applicabile Argomento non applicabile

Solo nativo

Argomento non applicabile

Pro, Premium e Ultimate

Argomento non applicabile Argomento non applicabile Argomento non applicabile

Solo nativo

Argomento non applicabile

La libreria di runtime del linguaggio C contiene speciali versioni di debug delle funzioni di allocazione heap. Queste funzioni presentano lo stesso nome delle corrispondenti versioni di rilascio, con l'unica differenza del suffisso _dbg. Questo argomento illustra le differenze tra la versione di rilascio di una funzione CRT e la versione _dbg, utilizzando malloc e _malloc_dbg come esempi.

Quando viene definito _DEBUG, CRT associa tutte le chiamate a malloc a _malloc_dbg. Pertanto non è necessario riscrivere il codice utilizzando _malloc_dbg anziché malloc per sfruttarne i vantaggi durante il debug.

È tuttavia possibile chiamare _malloc_dbg esplicitamente. La chiamata esplicita di _malloc_dbg presenta alcuni vantaggi supplementari:

  • Registrazione delle allocazioni del tipo _CLIENT_BLOCK.

  • Memorizzazione del file sorgente e del numero di riga nel punto in cui ha avuto luogo la richiesta di allocazione.

Se non si desidera convertire le chiamate a malloc in chiamate a _malloc_dbg, è possibile ottenere le informazioni sul file di origine definendo _CRTDBG_MAP_ALLOC. In questo modo, il preprocessore associa direttamente tutte le chiamate a malloc alle chiamate a _malloc_dbg anziché basarsi su un wrapper di malloc.

Per registrare i tipi separati di allocazioni in blocchi client, è necessario chiamare _malloc_dbg direttamente e impostare il parametro blockType su _CLIENT_BLOCK.

Quando _DEBUG non viene definito, le chiamate a malloc non vengono disturbate, le chiamate a _malloc_dbg vengono risolte in malloc, la definizione di _CRTDBG_MAP_ALLOC viene ignorata e non vengono fornite le informazioni sul file di origine relative alla richiesta di allocazione. Dal momento che malloc non presenta alcun parametro del tipo di blocco, le richieste di tipi _CLIENT_BLOCK vengono gestite come allocazioni standard.

Vedere anche

Altre risorse

Tecniche di debug CRT