¿Es un comportamiento indefinido para acceder a una matriz más allá de su final, si esa área está asignada? [duplicar]
Posible duplicado:
¿Es la "estructura hackear" el comportamiento técnicamente indefinido?
Normalmente el acceso a una matriz más allá de su final es un comportamiento indefinido en C. Por ejemplo:
int foo[1];
foo[5] = 1; //Undefined behavior
¿Sigue siendo un comportamiento indefinido si sé que el área de memoria después del final de la matriz se ha asignado, con malloc o en la pila? Aquí hay un ejemplo:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int len;
int data[1];
} MyStruct;
int main(void)
{
MyStruct *foo = malloc(sizeof(MyStruct) + sizeof(int) * 10);
foo->data[5] = 1;
}
He visto este parche usado en varios lugares para hacer una estructura de longitud variable, y parece funcionar en la práctica. ¿Es un comportamiento técnicamente indefinido?