one (admittedly weak) reason for using calloc is that it insulates you from 16-bit int compilers on 32-bit pointer machines. calloc(1024, 1024) gives you 1MB with 16 or 32 bit ints whereas malloc(1024*1024) may give you none.