Ist es undefiniert, auf ein Array über dessen Ende hinaus zuzugreifen, wenn dieser Bereich zugewiesen ist? [Duplikat]

Mögliche Duplikate:
Ist der "struct hack" technisch undefiniertes Verhalten?

Normalerweise ist der Zugriff auf ein Array über sein Ende hinaus in C undefiniert. Beispiel:

int foo[1];
foo[5] = 1; //Undefined behavior

Ist es immer noch undefiniertes Verhalten, wenn ich weiß, dass der Speicherbereich nach dem Ende des Arrays zugewiesen wurde, mit malloc oder auf dem Stapel? Hier ist ein Beispiel:

#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;
}

Ich habe gesehen, dass dieses Muster an mehreren Stellen verwendet wurde, um eine Struktur mit variabler Länge zu erstellen, und es scheint in der Praxis zu funktionieren. Ist es technisch undefiniertes Verhalten?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage