I am dynamically allocating a struct which has a different struct as a member:
struct a {
// other members
struct b;
}
struct b
The difference is really equivalent to any other situation where you're comparing "automatic" and "dynamic" allocation.1
In terms of a guide as when you should use a pointer member, I would say that you should avoid it unless there's a good reason not to, due to the programmer overhead in dealing with manual memory management (and the bugs that it inevitably leads to).
An example of a good reason would be if you needed your struct a
to refer to an existing struct b
.