¿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?

Respuestas a la pregunta(3)

Su respuesta a la pregunta