>>548
>>549 

main() の hoge には NULL というか、でたらめ値が入っていて、
それが foo() にそのままわたっています。foo() の hoge は NULL というかでたらめ値。
次に hoge には、malloc() の返り値が入ります。
そしてそのまま foo() は終了し、hoge の値は胡散霧消です。hoge は関数内ローカル変数ですから、そのままでは main() に渡りません。
main() に hoge の値を返したいのなら、そのように表立って記述しなければなりません。
>>549 foo()

あるいは、main() の hoge のアドレス &hoge を foo() に渡して、
p = &hoge
として *p = malloc() とすれば、main の hoge に malloc() の返り値を入れる、ということを foo() の中で行うことができます。
>>549 bar()