I found an implementation that did none of those. But it was fast, and close-ish to C++ friendly... ish.
It was open source so I encapsilated it all, converted all those pesky malloc and frees to... not malloc and frees (which indirectly fixed the memory issues) and changed it to output the result to something a little more useful.
And now I'm sharing the result with you. https://bitbucket.org/jlm/voronoi-c/