C Language Accesso alla memoria oltre il blocco assegnato


Esempio

Un puntatore a un pezzo di memoria contenente n elementi può essere dereferenziato solo se si trova nella memory dell'intervallo e nella memory + (n - 1) . Il dereferenziamento di un puntatore al di fuori di tale intervallo comporta un comportamento indefinito. Ad esempio, considera il seguente codice:

int array[3];
int *beyond_array = array + 3;
*beyond_array = 0; /* Accesses memory that has not been allocated. */

La terza riga accede al quarto elemento in un array che ha una lunghezza di soli 3 elementi, il che porta a un comportamento non definito. Analogamente, anche il comportamento della seconda riga nel seguente frammento di codice non è ben definito:

int array[3];
array[3] = 0;

Si noti che il puntamento oltre l'ultimo elemento di un array non è un comportamento non definito ( beyond_array = array + 3 è ben definito qui), ma il dereferenziamento è ( *beyond_array è un comportamento non definito). Questa regola vale anche per la memoria allocata dinamicamente (come i buffer creati tramite malloc ).