В таком случае, как система будет выделять память для y
, прежде чем узнает фактический объем памяти y[i].x
.
О, но она знает размерy[i].x
.Тип этого члена struct X*
, который является указателем.Размер указателя варьируется в зависимости от архитектуры, но обычно составляет 32 из 64 бит.Независимо от того, что такое X
(есть несколько крайних случаев, таких как указатели на функции).
Другими словами X
не является частью Y
.На самом деле Y
имеет указатель, который указывает на часть памяти, занятую (возможно, несколькими) X
.
Это похоже на наличие адреса.Вы можете записать это на небольшой лист бумаги и сохранить его.Все знают размер бумаги.Независимо от того, сколько (и сколько) домов занимают фактическое место.
Ваша ошибка сегментации не имеет ничего общего со всем этим.Скорее всего, вы пересекли какую-то границу.Но трудно сказать без реального кода.