#include <stdlib.h> void *calloc(size_t nmemb, size_t size); void *malloc(size_t size); void free(void *ptr); void *realloc(void *ptr, size_t size);
malloc() ÇÔ¼ö´Â size ¹ÙÀÌÆ®¸¦ ÇÒ´çÇÏ°í ÇÒ´çµÈ ¸Þ¸ð¸®¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ÇÒ´çÇÑ´Ù. ¸Þ¸ð¸®¸¦ Ŭ¸®¾îÇÏÁö ¾Ê´Â´Ù.
free() ´Â malloc(), calloc() ¶Ç´Â realloc()¿¡ ´ëÇÑ È£Ãâ½Ã ¹ÝȯµÇ´Â ptrÀÌ °¡¸®Å°´Â ¸Þ¸ð¸® °ø°£À» ÇØÁ¦ÇÑ´Ù. ±×·¸Áö ¾Ê°í, ¸¸ÀÏ free(ptr) °¡ Àü¿¡ ÀÌ¹Ì È£ÃâµÇ¾ú´Ù¸é, Á¤ÀǵÇÁö ¾ÊÀº ÇൿÀÌ ÀϾÙ. ¸¸ÀÏ ptr ÀÌ NULLÀ̶ó¸é, ¾î¶² ÀÛµ¿µµ ÇàÇØÁöÁö ¾Ê´Â´Ù.
realloc() ÇÔ¼ö´Â ptr ÀÌ °¡¸®Å°´Â ¸Þ¸ð¸® ºí·°ÀÇ Å©±â¸¦ size ¹ÙÀÌÆ®·Î ¹Ù²Û´Ù. ³»¿ëÀº ¿¹ÀüÀÇ ÃÖ¼Ò Å©±â¿¡¼ »õ Å©±â·Î ¹Ù²îÁö ¾Ê´Â´Ù. »õ·Ó°Ô ÇÒ´çµÈ ¸Þ¸ð¸®´Â ÃʱâȵÇÁö ¾Ê´Â´Ù. ¸¸ÀÏ ptr ÀÌ NULLÀ̶ó¸é, È£ÃâÀº malloc(size)°ú µ¿ÀÏÇÏ´Ù; ¸¸ÀÏ Å©±â°¡ 0 À̶ó¸é, È£ÃâÀº free(ptr) ¿Í µ¿ÀÏÇÏ´Ù. ¸¸¾à ptr ÀÌ NULLÀÌ ¾Æ´Ï¶ó¸é, ÀÌ ÇÔ¼ö´Â malloc(), calloc() À̳ª realloc()¿¡ ´ëÇÑ Ãʱâ È£Ãâ½Ã ¹ÝȯµÇ¾î¾ß ÇÑ´Ù.
free() ´Â ¾î¶² °ªµµ ¹ÝȯÇÏÁö ¾Ê´Â´Ù.
realloc() Àº »õ·Î ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ¹ÝȯÇϸç ÀÌ ¸Þ¸ð¸®´Â ¾î¶² Á¾·ùÀÇ º¯¼ö¸¦ À§ÇØ Àû´çÈ÷ Á¤·ÄµÇ¸ç ptr°ú´Â ´Ù¸¦ °ÍÀÌ´Ù. ±×·¸Áö ¾Ê°í, ¸¸ÀÏ ¿ä±¸°¡ ½ÇÆÐÇϰųª Å©±â°¡ 0 À̶ó¸é NULL À» ¹ÝȯÇÑ´Ù. ¸¸ÀÏ realloc() ÀÌ ½ÇÆÐÇÑ´Ù¸é ¿ø·¡ ºí·°Àº °Çµå¸®Áö ¾Ê°í ³²¾ÆÀÖ´Ù -- ÇØÁ¦µÇ°Å³ª À̵¿µÇÁö ¾Ê´Â´Ù.
malloc(), free() ¶Ç´Â realloc() ÇÔ¼ö¿¡¼ Å©·¡½¬´Â ÇÒ´çµÈ ¿µ¿ªÀÇ ¿À¹ö Ç÷ο쳪 °°Àº Æ÷ÀÎÅ͸¦ µÎ¹ø ÇØÁ¦ Çϴ°Ͱú °°Àº Èü ¿À¿°°ú Ç×»ó °ü·ÃÀÌ ÀÖ´Ù.
Linux libc (5.4.23 ÀÌÈÄ)ÀÇ ÃÖ±Ù ¹öÀü°ú GNU libc (2.x) ¹öÀüÀº ȯ°æ º¯¼ö¸¦ ÅëÇØ Á¶Á¤ÇÒ¼ö ÀÖ´Â malloc ¼öÇàÀ» Æ÷ÇÔÇÑ´Ù. MALLOC_CHECK_ ÀÌ ¼³Á¤µÇ¾ú´Ù¸é, Ưº°ÇÑ(´ú È¿À²ÀûÀÌÁö¸¸) ÇൿÀÌ ÇàÇØÁö¸ç, ÀÌ°ÍÀº °°Àº ÀÎÀÚ¸¦ °¡Áö°í free() ¸¦ µÎ¹ø È£ÃâÇϰųª ´ÜÀÏ ¹ÙÀÌÆ®(off-by-one ¹ö±×)ÀÇ ÃÊ°ú °°Àº °£´ÜÇÑ ¿¡·¯¿¡ ´ëÇÑ ¾ÈÀüÀ» À§ÇØ µðÀÚÀεǾú´Ù. ±×·¯³ª ±×·± ¿¡·¯µéÀº Ç×»ó º¸È£µÇÁö´Â ¾ÊÀ¸¸ç ¸Þ¸ð¸® ¸¯ÀÌ »ý±æ¼ö ÀÖ´Ù. ¸¸ÀÏ MALLOC_CHECK_ À» 0 À¸·Î ¼³Á¤Çϸé, ¹ß°ßµÈ Èü ¿À¿°Àº ¹«½ÃµÈ´Ù; ¸¸ÀÏ 1 ·Î ¼³Á¤Çϸé, Áø´ÜÀº stderr·Î Ãâ·ÂµÈ´Ù; ¸¸ÀÏ 2 ·Î ¼³Á¤Çϸé, abort() °¡ Áï½Ã È£ÃâµÈ´Ù. ÀÌ°ÍÀº À¯¿ëÇÏ´Ù. ¿Ö³ÄÇϸé Å©·¡½¬°¡ ³ªÁß¿¡ »ý±æ°ÍÀÌ°í ¹®Á¦ÀÇ ¿øÀÎÀ» ã¾Æ°¡´Â°ÍÀÌ ¸Å¿ì ¾î·Á¿öÁö±â ¶§¹®ÀÌ´Ù.