C Language Accediendo a la memoria más allá del trozo asignado


Ejemplo

Un puntero a un fragmento de memoria que contiene n elementos solo puede ser referenciado si está en el rango de memory y memory + (n - 1) . La desreferenciación de un puntero fuera de ese rango da como resultado un comportamiento indefinido. Como ejemplo, considere el siguiente código:

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

La tercera línea accede al cuarto elemento de una matriz que solo tiene 3 elementos de longitud, lo que lleva a un comportamiento indefinido. Del mismo modo, el comportamiento de la segunda línea en el siguiente fragmento de código tampoco está bien definido:

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

Tenga en cuenta que apuntar más allá del último elemento de una matriz no es un comportamiento indefinido ( beyond_array = array + 3 está bien definido aquí), pero la *beyond_array referencia es ( *beyond_array es un comportamiento indefinido). Esta regla también se aplica a la memoria asignada dinámicamente (como los buffers creados a través de malloc ).