Si tu fais du C++, utilises l´operateur new a la place de malloc. Il y a de tres nombreuses raisons a cela, les principales etant cites dans cette page de Soustrup:
http://www.research.att.c.com/~bs/bs_faq2.html#void-ptr
malloc renvoie juste un void* car il n´a aucune idee du type d objet qui va etre utilise par la memoire utilisee. Le C++ force le casting lorsqu il y a un void* comme ca l utilisateur est oblige de verifie que ce qu il fait est correct (style tu alloues un byte mais utilises le pointeur pour un long, pas top). Mais meme au dela, de nombreux problemes d´aliasing peuvent apparaitre avec certain compilateurs, entre autres.