All usages of conversion context and briefly used and released right away
That's not true, conversion context is also used for deferred operations where it lives as long as the operation lives.
Here we use it for a single allocation, which is absolutely not performance critical so efficiency does not matter, and it only adds unnecessary indirection and complexity.
The code also doesn't check for memory allocation failures and uses large amount of stack space for no good reason.
Sure, the free cast is a bit ugly. I'm fine keeping a separate pointer if that matters.