Вы передаете значение str x
функции do_something
.
Изменение x
в do_something
не изменит y
в функции main
. Либо передайте ссылку на y
следующим образом:
void do_something(str **x)
{
str *p = (str *)malloc (sizeof (str));
p->y = 3;
*x = p;
}
int main(void)
{
str *y;
do_something (&y);
printf ("%d", y->y);
}
или заставить функцию do_something
вернуть адрес распределенной структуры:
Ниже приведен обычный способ сделать это в C.
str *do_something(void)
{
str *p = (str *)malloc (sizeof (str));
if (p) // ensure valid pointer from malloc.
{
p->y = 3;
}
return p;
}
int main(void)
{
str *y = do_something (y);
printf ("%d", y->y);
}