Является ли «взлом структуры» технически неопределенным поведением?

То, о чем я спрашиваю, - это хорошо известный трюк «последний член структуры имеет переменную длину». Он выглядит примерно так:

struct T {
    int len;
    char s[1];
};

struct T *p = malloc(sizeof(struct T) + 100);
p->len = 100;
strcpy(p->s, "hello world");

Из-за того, что структура размещена в памяти, мы можем наложить структуру на больший, чем необходимо блок, и обработать последний член так, как если бы он был больше, чем указанный 1 символ .

Итак, вопрос в следующем. : Является ли эта техника технически неопределенным поведением? . Я ожидал, что это так, но мне было любопытно, что об этом говорится в стандарте.

PS: Я знаю о подходе C99 к этому, я бы хотел ответы должны придерживаться конкретно версии трюка, как указано выше.

109
задан Evan Teran 17 October 2010 в 06:47
поделиться