Amikor calloc a memória blokkjának kiosztására szolgál, az allokált régiót nullára inicializálják. Ellentétben, malloc nem érinti a kiosztott memóriablokk tartalmát, azaz szemétértékeket tartalmaz. Ez potenciálisan biztonsági kockázatot jelenthet, mivel a memória tartalma kiszámíthatatlan, és a programozási hibák ezen tartalmak szivárgását eredményezhetik..
| calloc | malloc | |
|---|---|---|
| Funkció | a memória egy olyan területét foglalja el, amely elég nagy ahhoz, hogy mindegyik "méret" bájt "n elemet" tárolja. A memória tartalmát nullára inicializálja. | kiosztja a "méret" bájt memóriát. | 
| Az érvek száma | 2 | 1 | 
| Szintaxis | void * calloc (blokkok száma ,________blokk_in_bytes__________] | void * malloc (size_in_bytes); | 
| A kiosztott memória tartalma | A kiosztott régiót nullára inicializálják. | A kiosztott memória tartalma nem változik. azaz a memória kiszámíthatatlan vagy szemétértékeket tartalmaz. Ez kockázatot jelent. | 
| Visszatérési érték | void mutató (void *). Ha az allokáció sikeres, a memóriablokkra mutató mutató visszatér. Ha a memória kiosztása sikertelen, akkor egy NULL mutató kerül vissza. | void mutató (void *). Ha az allokáció sikeres, a memóriablokkra mutató mutató visszatér. Ha a memória kiosztása sikertelen, akkor egy NULL mutató kerül vissza. | 
void * malloc (méret_t méret);
kiosztja méret bájt memória. Ha a kiosztás sikeres, akkor a kiosztott memória mutatója visszatér. Másképp NULLA visszatér. Példa:  
/ * Helyezzen el memóriát egy 15 típusú elemmel rendelkező tömb számára int. * / int * ptr = malloc (15 * méret (int)); if (ptr == NULL) / * A memória nem volt lefoglalható, tehát nyomtasson ki egy hibát, és lépjen ki. * / fprintf (stderr, "Nem lehet elosztani a memóriát \ n"); exit (EXIT_FAILURE); / * Az allokáció sikeres volt. * /
Vegye figyelembe, hogy malloc megköveteli, hogy kiszámítsuk a szükséges memória bájtjait, és ezt érvelésként továbbítsuk a malloc számára. 
void * calloc (méret_táblázat, méret_t bájt);
a szomszédos memória blokkot allokálja, amely elég nagy ahhoz, hogy elférjen nelements méretű bájt minden egyes. A kiosztott régiót nullára inicializálják. A fenti példában: 
/ * Helyet foglaljon el egy 15 típusú elemmel rendelkező tömb számára int és nullára inicializálja. * / int * ptr = calloc (15, méret (int)); if (ptr == NULL) / * A memória nem volt lefoglalható, tehát nyomtasson ki egy hibát, és lépjen ki. * / fprintf (stderr, "Nem lehet elosztani a memóriát \ n"); exit (EXIT_FAILURE); / * Az allokáció sikeres volt. * /
kallok (m, n) megegyezik a
p = malloc (m * n); if (p) memset (p, 0, m * n);
Ez a videó bemutató ismerteti a memóriaelosztási funkciókat malloc, calloc és realloc, valamint a memória kiosztási funkciója ingyenes: 
Általában jó ötlet használni calloc felett malloc. Malloc használatakor a kiosztott memória tartalma kiszámíthatatlan. A programozási hibák miatt ezek a memóriatartalmak nem kívánt, de nagyon érzékeny módon szivároghatnak. Jó példa erre a szivárgásra az OpenSSL Heartbleed sebezhetősége, amelynek alapvető mechanizmusát az XKCD képregény ismerteti, és néhány további technikai részlet ebben a blogbejegyzésben található.. 
A calloc egy kicsit lassabb, mint a malloc, mivel a memóriaterület inicializálásának további lépése van. A gyakorlatban azonban a sebességbeli különbség nagyon kicsi, és figyelmen kívül hagyható.