Просто очевидным образом:
Union *up;
up = malloc(sizeof(Union));
up->secondField = malloc(n);
// ...
free(up->secondField);
free(up);
Конечно, вы не должны назначать up->firstField
между назначением и free
из up->secondField
. Таким образом, вы должны разработать свой код, чтобы гарантировать, что это не может произойти.