Утечки и фрагментация памяти -- это миф, как мне кажется, про который любят очень рассказывать те, кто их в глаза не видел. Только в узком круге задач возможна фрагментация или требуется гарантированное выделение памяти. Там и там можно тем же malloc() выделить заранее, при старте программы. Ну и Леонидом Ивановичем ниже согласен. В 99.9% случаев при malloc()==NULL можно смело сделать abort() и курятник не пострадает.