Invocare 'free(p)' richiede l'indirizzo esatto restituito originariamente da malloc; se il puntatore è stato incrementato per scorrere i dati ('p++'), passare il puntatore alterato a free corrompe la tabella dei blocchi heap.
FREE_INTERIOR_POINTER
→
L'errore si manifesta quando si invoca free() passando l'indirizzo di una variabile allocata nello stack locale, una stringa letterale costante o un puntatore la cui base è stata alterata da aritmetica dei puntatori.
FREE_INVALID_POINTER
→
La funzione restituisce l'indirizzo '&var' di una variabile locale allocata nel proprio stack frame; non appena la funzione termina, lo stack viene invalidato e qualsiasi accesso al puntatore genera dati corrotti.
RET_PTR_LOCAL_VAR
→
L'accesso a un indice di un blocco allocato con malloc supera la dimensione effettivamente richiesta, sovrascrivendo i metadati interni dell'allocatore di memoria o strutture dati adiacenti.
HEAP_BUFFER_OVERFLOW
→
Se l'area di memoria non può essere espansa sul posto, realloc alloca un nuovo blocco, copia i dati e libera automaticamente il vecchio blocco; continuare a usare il vecchio puntatore costituisce un grave use-after-free.
REALLOC_PTR_INVALIDATION
→
La chiamata di allocazione fallisce restituendo NULL a causa dell'esaurimento della memoria virtuale o fisica del sistema, oppure per il passaggio di un valore negativo convertito in dimensione enorme (size_t underflow).
MALLOC_RETURNS_NULL
→
Il programma alloca memoria dinamica con malloc, calloc o realloc senza deallocarla con free(), perdendo l'ultimo riferimento all'indirizzo e provocando il consumo progressivo della RAM di sistema.
MEMORY_LEAK_MALLOC
→
Invocare 'realloc(ptr, 0)' aveva comportamenti discordanti tra le implementazioni storiche (alcune liberavano la memoria restituendo NULL, altre restituivano un puntatore valido deallocabile); lo standard C23 lo classifica formalmente come comportamento indefinito.
REALLOC_ZERO_SIZE
→