У меня есть следующий пример
#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
typedef struct test{
int a;
long b;
int c;
} test;
int main()
{
test *t = (test*) malloc(offsetof(test, c));
t -> b = 100;
}
Работает нормально, но я не уверен в этом.Я думаю, что у меня есть UB здесь.У нас есть указатель на объект типа структуры.Но объект типа структуры не является действительным.
Я прошел стандарт и не смог найти какое-либо определение этого поведения.Единственный раздел, который я мог найти близко к этому, это 6.5.3.2:
Если указателю было присвоено недопустимое значение, поведение унарного оператора * не определено
Но это не очень важно, поскольку указатель, возвращаемый malloc
, полностью действителен.
Есть ли в стандарте ссылка, объясняющая такое поведение?Я использую C11 N1570.