Это неопределенное поведение для доступа к массиву за его концом, если эта область выделена? [Дубликат]
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;
}
Я видел этот паттен, используемый в нескольких местах для создания структуры переменной длины, и, похоже, он работает на практике. Это технически неопределенное поведение?