Это неопределенное поведение для доступа к массиву за его концом, если эта область выделена? [Дубликат]

Possible Duplicate:
Is the “struct hack” technically undefined behavior?

Обычно доступ к массиву после его конца - неопределенное поведение в C. Например:

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

Это все еще неопределенное поведение, если я знаю, что область памяти после конца массива была выделена, с malloc или в стеке? Вот пример:

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

Я видел этот паттен, используемый в нескольких местах для создания структуры переменной длины, и, похоже, он работает на практике. Это технически неопределенное поведение?

Ответы на вопрос(3)

Ваш ответ на вопрос