Your code above declares two typedef aliases to structs, it doesn't actually create variables.
You could create an instance of the Something type with:
This wouldn't require a malloc except for the position inside:
Code:
foo.position = malloc(n * sizeof *foo.position);
Where n is the number of "Vector3" things you want to allocate for position to point to. Since it's a position, I'm imagining just one, but then you wouldn't have bothered with a pointer, would you.
If on the other hand, you declared a pointer to Something, you'd do:
Code:
Something *foo;
foo = malloc(sizeof *foo);
foo.position = malloc(sizeof *foo.position);
Of course, you'd check the return of malloc for NULL in each instance.