Назначения не в стеке или куче, объекты.
Объект a
находится в стеке, потому что он создан так:
struct A a;
Чтобы создать объекты в куче, вы должны выделить для них память, используя malloc
.
Таким образом, хотя a
находится в стеке, a._pb_arr
будет в куче. Вы должны явно free
память, когда вы закончите. По той же причине b
находится в стеке, а pb
- в куче.
Когда вы назначаете объекты в массиве a._pb_arr
, значения будут скопированы, но они все равно останутся в куче, так как вы выделили память для a._pb_arr
.
Чтобы предотвратить утечки памяти, вы должны использовать free
для a._pb_arr
и pb
.