I know C is easy to abuse - I know C++ is shit when used wrong, and by definition shit as an object environment. But mallocing and freeing is just a non-issue. Always use an explicit cast in C, always know the size of data, do the prep work - just like writing assembler.
C is not a good application langauge in any case, so this discussion is pointless.
Personally, I agree with Scott, that Obj-C is a better approach than C++, but it's still C and it still sucks as an application language.