µ¿Àû ¸Þ¸ð¸®ÇÒ´ç
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
HTML º¯È¯¹®¼­

<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> 
<article lang="ko"> 
 
<!--           --> 
<!-- ¹®¼­ Á¤º¸ --> 
<!--           --> 
<articleinfo> 
    <title>µ¿Àû ¸Þ¸ð¸®ÇÒ´ç</title> 
 
    <author> 
        <surname>À± »ó¹è</surname> 
 
        <affiliation> 
            <address> 
                <email>dreamyun@yahoo.co.kr</email> 
            </address> 
        </affiliation> 
    </author> 
</articleinfo> 
 
 
<!--                                                                 --> 
<!-- ¼½¼Ç ½ÃÀÛ                                                       --> 
<!--                                                                 --> 
<section> 
    <title>¼Ò°³</title> 
    <para> 
        ¾î¶² ¾ð¾î¸¦ ÀÌ¿ëÇØ¼­ ÇÁ·Î±×·¡¹ÖÀ» ÇϵçÁö ÇÁ·Î±×·¥ÀÌ ÇÏ´Â ÁÖ¿äÇÑ   
        ÀÓ¹«´Â °á±¹ µ¥ÀÌŸ¸¦ ÁÖ°í/¹Þ°í À̸¦ °¡°øÇÏ´Â ÀÛ¾÷ÀÌ´Ù.   
        ÀÌ´Â »ç¶÷ÀÌ »çȸ¿¡¼­ »ì¾Æ°¡±â À§ÇÑ °¡Àå ÁÖ¿äÇÑ ÀÏÀÌ ¼­·Î°£ÀÇ  
        ´ëÈ­ÀΰͰú ¸¶Âù°¡ÁöÀÌ´Ù.  
    </para> 
    <para> 
        »ç¶÷Àº ¼­·Î ´ëÈ­¸¦ Çϱâ À§Çؼ­ ´ëÈ­ÇÒ ³»¿ëÀ» ¹Ì¸® ¾îµò°¡¿¡ ÀúÀåÇ졒  
        ÀÖ¾î¾ß ÇÑ´Ù. »ç±³¸¦ À§ÇÑ ´ëÈ­¸¦ À§Çؼ­¶ó¸é ¸Ó¸®¿¡ ÀúÀåµÇ¾î ÀÖ´Â 
        (ÀúÀåÀ̶ó°í ¸»ÇÏ´Ï Á» ÀÌ»óÇϱäÇÏ´Ù --;) µ¥ÀÌŸ(°æÇè)¸¦ Ȱ¿ëÇØ¼­  
        ´ëÈ­¸¦ ÇÏ¸é µÉ°ÍÀ̰í, ¾÷¹«»ó Áß¿äÇÑ ´ëÈ­¶ó¸é, ¹Ì¸® ³ëÆ®¸¦ ÇϵçÁö  
        ÇØ¼­ ½ÇÁ¦ ´ëÈ­¶§ Áß¿äÇÑ ³»¿ëÀ» ºüÆ®¸®Áö ¾Êµµ·Ï Áغñ¸¦ ÇØ¾ß ÇÒ°ÍÀÌ´Ù.     
    </para> 
    <para> 
        ÇÁ·Î±×·¥µµ ¸¶Âù°¡Áö·Î ¾î¶² ¼öÇàÀ» À§Çؼ­´Â µ¥ÀÌŸ¸¦ ¾îµò°¡¿¡ ÀúÀåÇØ  
        µÎ°í ÀÖ¾î¾ß ÇÒ°ÍÀÌ´Ù. ÀÌ·¯ÇÑ µ¥ÀÌŸ ÀÇ ÀúÀåÀº ¸Þ¸ð¸®°ø°£  
        ȤÀº µð½ºÅ© °ø°£À» ÀÌ¿ëÇÑ´Ù.  
    </para> 
    <para> 
        À̹®¼­´Â µ¥ÀÌŸÀúÀåÀ» À§Çؼ­ ¾î¶»°Ô ¸Þ¸ð¸® °ø°£À»  
        ÀÌ¿ëÇØ¾ß ÇÏ´ÂÁö¿¡ ´ëÇÑ ³»¿ëÀ» ´Ù·ç°í ÀÖ´Ù.  
    </para> 
</section> 
 
<section> 
    <title>¸Þ¸ð¸® ÇÒ´ç</title>     
    <para> 
        ¸Þ¸ð¸® ÇÒ´çÀ» À§ÇÑ ¹æ¹ýÀº Å©°Ô 2°¡Áö°¡ ÀÖ´Ù. Á¤Àû¸Þ¸ð¸® ÇÒ´ç°ú  
        µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀÌ ±×°ÍÀε¥, µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀ» ¼³¸íÇϱâ Àü¿¡  
        Á¤Àû ¸Þ¸ð¸® ÇÒ´ç¿¡ ´ëÇØ °£´ÜÈ÷ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. 
    </para> 
    <section> 
        <title>Á¤Àû ¸Þ¸ð¸® ÇÒ´ç¿¡ ´ëÇØ¼­</title> 
        <para> 
            Static Memory Allocation À̶ó°í ºÒ¸®¿ì¸ç,  
            ¸Þ¸ð¸®ÀÇ Å©±â°¡ ¹Ì¸® °íÁ¤½ÃÄѼ­ ÇÒ´çÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù.  
            ÀϹÝÀûÀ¸·Î ¸Þ¸ð¸®Å©±â¸¦ ÇÒ´çÇÏ´Â ½¬¿î ¹æ¹ýÀ¸·Î, ÇÒ´ç½ÃÄÑÁà¾ßÇÒ  
            ¸Þ¸ð¸®ÀÇ ÇѰè Å©±â¸¦ ¸íÈ®È÷ ¾Ë°í ÀÖÀ»°æ¿ì »ç¿ëÇÑ´Ù.   
        </para> 
        <para> 
            ¿¹¸¦ µé¾î ÁÖ¼Ò¸¦ ÀúÀåÇϱâ À§ÇÑ ¸Þ¸ð¸® °ø°£ÀÌ ÇÊ¿äÇÏ´Ù°í ÇÒ¶§,  
            ¿ì¸®´Â ÁÖ¼Ò¸¦ ÀúÀåÇϱâ À§Çؼ­ ¾î´ÀÁ¤µµÀÇ ¸Þ¸ð¸® °ø°£ÀÌ ÇÊ¿äÇÑÁö¸¦  
            ´ëÃæ °è»êÇÒ¼ö ÀÖ´Ù. ÁÖ¼Ò±æÀ̰¡ ¾Æ¹«¸® ±æ¾îºÁ¾ß 256 ÀÚ¸¦ ³ÑÁö  
            ¾ÊÀ»°ÍÀ̱⠶§¹®ÀÌ´Ù.   
        </para> 
        <para> 
            ÀÌ·¯ÇÑ Á¤Àû ¸Þ¸ð¸® ÇÒ´çÀº ÇÁ·Î±×·¥ ½ÃÀ۽ÿ¡ ¹Ì¸® °íÁ¤½ÃÄѼ­  
            ÇÒ´ç½ÃÄÑ ¹ö¸°´Ù.(±×·± ÀÌÀ¯·Î Static À̶ó°í ºÎ¸®±âµµ ÇÑ´Ù)   
            <screen> 
... 
int main() 
{ 
    char address[256]; 
    char zipcode[10]; 
 
    ...  
    ... 
}                 
            </screen> 
            Á¤ÀûÀ¸·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ°æ¿ì ¾à°£ÀÇ ¸Þ¸ð¸® ³¶ºñ°¡ ÀÖÀ»¼ö ÀÖ´Ù.  
            º¸Åë ÇÒ´çÇÒ ¸Þ¸ð¸®¸¦ °áÁ¤ÇÒ¶§, ÃÖ´ë »ç¿ë°¡´ÉÇÏ´Ù°í »ý°¢µÇ´Â  
            ¸Þ¸ð¸®·®º¸´Ù ¾à°£´õ Å©°Ô Àâ´Â°Ô º¸ÅëÀ̱⠶§¹®ÀÌ´Ù.  
        </para> 
        <para> 
            ±×·¯³ª Å©±âÀÇ ÇѰ踦 ¸íÈ®È÷ ¾Ë¼ö ÀÖÀ»°æ¿ì, µ¿Àû ¸Þ¸ð¸® ÇҴ纸´Ù  
            »ç¿ëÇϱ⠽±°í, ¹ö±×°¡ ¹ß»ýÇÒ È®·üµµ Àû´Ù´Â ÀåÁ¡À» °¡Áö°í ÀÖ´Ù.  
            º¸Åë ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÏ°Ô µÉ°æ¿ì ¾à°£ÀÇ ¸Þ¸ð¸® ³¶ºñº¸´Ù´Â  
            ¹ö±×ÀÇ ¹ß»ýÀ» ´õÅ« ÇÁ·Î±×·¥ À§Çè¿ä¼Ò·Î »ý°¢Çϱ⠶§¹®¿¡,  
            °¡´ÉÇÑÇÑ Á¤Àû ¸Þ¸ð¸® ÇÒ´çÀ» »ç¿ëÇÑ´Ù.  
            µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀ» »ç¿ëÇÒ°æ¿ì ¸Þ¸ð¸® ´©¼ö, È¥µ¿µÇ´Â Æ÷ÀÎÅÍÀÇ  
            »ç¿ë¿¡ ÀÇÇÑ À߸øµÈ ¸Þ¸ð¸® ÂüÁ¶µî ¿©·¯°¡Áö  
            ¹®Á¦¸¦ ¹ß»ý½Ãų¼ö Àֱ⠶§¹®ÀÌ´Ù. Æ÷ÀÎÅÍ À߸ø»ç¿ëÇØ¼­ ¹ß»ýÇÏ´Â  
            ¹®Á¦°¡ ¾ó¸¶³ª ÇÁ·Î±×·¡¸Ó¸¦ ±«·ÓÈ÷´ÂÁö´Â ¸»ÇÏÁö ¾Ê¾Æµµ  
            Àß ¾Ë°í ÀÖÀ¸¸®¶ó »ý°¢µÈ´Ù.   
        </para> 
    </section> 
    <section> 
        <title>µ¿Àû ¸Þ¸ð¸® ÇÒ´ç¿¡ ´ëÇØ¼­</title> 
        <para> 
            Dynamic Memory Allocation À̶ó°í ºÒ¸®¿ì¸ç,  
            ¸»±×´ë·Î ÇÁ·Î±×·¥ ½ÇÇàÁß¿¡ µ¿ÀûÀ¸·Î ¸Þ¸ð¸®ÀÇ Å©±â¸¦ ÇÒ´ç½ÃÄÑÁà¾ß  
            ÇÒ Çʿ䰡 ÀÖÀ»°æ¿ì »ç¿ëÇÑ´Ù.  
        </para> 
        <para> 
            ¿¹¸¦ µé¾î¼­ °£´ÜÇÑ ¿¡µðÅÍ ÇÁ·Î±×·¥À» ¸¸µç´Ù°í ÇßÀ»¶§,  
            º¸Åë ÆÄÀÏÀÇ ³»¿ëÀ» ¸Þ¸ð¸® »ó¿¡ ÀÐ¾î µéÀÌ°Ô µÉ°ÍÀÌ´Ù.  
            ±×·±µ¥ ÆÄÀÏÀÇ Å©±â°¡ ¾ó¸¶°¡ µÉÁö´Â ¾Æ¹«µµ ¾Ë¼ö ¾ø´Ù.  
            ÆÄÀÏÀÌ ÀÛÀ»°æ¿ì ±× Å©±â°¡ 0ÀÌ µÉ¼öµµ ÀÖ°ÚÁö¸¸ ÆÄÀÏÀÌ Å¬°æ¿ì  
            ¼ö½Ê ¸Þ°¡ ¹ÙÀÌÆ® ȤÀº ±× ÀÌ»óÀÌ µÉ¼öµµ ÀÖÀ»°ÍÀ̱⠶§¹®ÀÌ´Ù.  
            À̰æ¿ì¿¡´Â Á¤Àû ¸Þ¸ð¸® ÇÒ´çÀ» »ç¿ëÇÒ¼ö ¾øÀ¸¸ç,  
            ¾î¿¼ö ¾øÀÌ µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀ» »ç¿ëÇØ¾ß ÇÒ°ÍÀÌ´Ù.    
        </para> 
        <para> 
            "¾î¿¼ö ¾øÀÌ" ¶õ ¸»À» ºÙÀÎ ÀÌÀ¯´Â µÇµµ·ÏÀÌ¸é µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀ»  
            »ç¿ëÇÏ´Â°Í º¸´Ù´Â Á¤Àû¸Þ¸ð¸® ÇÒ´çÀ» »ç¿ëÇÏ´Â°Ô ¿©·¯¸ð·Î ÀÌÀÍÀÌ  
            ¸¹±â ¶§¹®ÀÌ´Ù.  
        </para> 
        <section> 
            <title>malloc, realloc, sizeof, memset, free</title> 
            <section> 
                <title>malloc</title> 
                <para> 
                    µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀ» À§Çؼ­ C ´Â ÁÖ¿äÇÑ ¸î°¡Áö ½Ã½ºÅÛ ÇÔ¼ö¿Í  
                    Ű¿öµå¸¦ Á¦°øÇÑ´Ù. ÀÌÁß malloc ´Â ¸Þ¸ð¸® »ó¿¡¼­ ¿¬¼ÓµÈ  
                    ÀÏÁ¤ Å©±âÀÇ °ø°£À» ÇÒ´ç¹Þ±â À§Çؼ­ »ç¿ëÇÏ´Â °¡Àå  
                    ÀϹÝÀûÀÎ ÇÔ¼öÀÌ´Ù.      
                    <screen> 
void *malloc(size_t number_of bytes); 
                    </screen> 
                    malloc() ÇÔ¼ö´Â ÀÎÀÚ·Î ÇÒ´ç¹Þ°íÀÚ ÇÏ´Â ¸Þ¸ð¸®ÀÇ Å©±â¸¦  
                    byte ´ÜÀ§·Î ¸í½ÃÇÑ´Ù. ¸¸¾à ¸Þ¸ð¸® ÇÒ´çÀÌ ¼º°øÇß´Ù¸é malloc  
                    ÇÔ¼ö´Â ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ ½ÃÀÛ À§Ä¡¸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͸¦  
                    ¹ÝȯÇÑ´Ù. (Æ÷ÀÎÅÍ¿¡ ´ëÇÑ ³»¿ëÀº <ulink url=modules.php?name=News&file=article&sid=87&mode=nested>µ¥ÀÌŸ¿Í Æ÷ÀÎÅÍ</ulink>)  
                    void * ¸¦ ¹Þ´Â ÀÌÀ¯´Â void * ¸¦ ÀÌ¿ëÇÒ°æ¿ì  
                    ¾î¶² ŸÀÔÀ¸·Î¶óµµ  
                    Çüº¯È¯ÀÌ °¡´ÉÇϱ⠶§¹®ÀÌ´Ù.  
                </para> 
                <para> 
                    ¸¸¾à 100 byte ÀÇ ¹®ÀÚ¸¦ ÀúÀåÇϱâ À§ÇÑ °ø°£À»  
                    ÇÒ´ç¹Þ±â ¿øÇÑ´Ù¸é  
                    ´ÙÀ½°ú °°ÀÌ malloc() ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÉ°ÍÀÌ´Ù.      
                    <screen> 
char *cp; 
 
cp = (char *)malloc(100); 
                    </screen> 
                    À§ÀÇ ¹æ¹ýÀ» ÅëÇØ¼­ ¸Þ¸ð¸® ÇÒ´çÀ» ÇÏ°Ô µÈ´Ù¸é,  
                    ¸Þ¸ð¸®´Â ´ÙÀ½°ú °°ÀÌ ±¸¼ºµÇ°Ô µÉ°ÍÀÌ´Ù.  
                    <screen> 
  0 1 2 3          0  ....        100 
 +-+-+-+-+        +-+-+-+-+-+-+-+-+-+ 
 | cp    |        |                 | 
 +-+-+-+-+        +-+-+-+-+-+-+-+-+-+ 
  |                | 
  +----------------+  
                    </screen> 
                    malloc() À» ÅëÇØ¼­ ¸Þ¸ð¸® ÇÒ´ç¿äûÀ» ¹ÞÀº ¿î¿µÃ¼Á¦(Ä¿³Î)Àº  
                    100 byte Å©±â¸¸Å­ÀÇ ¿¬¼ÓµÈ ¸Þ¸ð¸®¸¦ ÇÒ´çÇϰí,  
                    ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ  
                    ù¹øÂ°¸¦ °¡¸®Å°´Â ÁÖ¼Ò°ªÀ» ³Ñ°ÜÁØ´Ù.  
                    ¿ì¸®°¡ ½ÇÁ¦ *cp ¸¦°¡Áö°í  
                    ÇÏ´Â ¿©·¯°¡Áö µ¥ÀÌŸ °ü·ÃµÈ Á¶ÀÛÀº ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ ÁÖ¼Ò°ªÀ»  
                    ÀÌ¿ëÇØ¼­ ÀÌ·ç¾îÁö°Ô µÈ´Ù.  
                </para> 
                <para> 
                    ¾Æ·¡ÀÇ ¿¹Á¦¸¦ ½ÇÇà½ÃÄѺ¸¸é Á»´õ ½±°Ô ÀÌÇØ°¡ °¡´ÉÇÒ°ÍÀÌ´Ù.   
                </para> 
                <para> 
                    <emphasis>¿¹Á¦ : malloc_1.c</emphasis> 
                    <screen> 
#include <unistd.h> 
 
int main() 
{ 
    char buf[128] = "12345"; 
    char buf2[128] = "12345"; 
    char *ch; 
 
    char *cp; 
    char *ct; 
 
    ch = buf; 
    printf("address ch           : %x\n", &ch); 
    printf("address ch -> buf    : %x\n", ch); 
    printf("address buf          : %x\n", buf); 
    printf("address buf -> first : %x\n", &(*buf)); 
    printf("\n"); 
 
    printf("address cp not      : %x\n", &cp); 
    printf("address cp ->       : %x\n", cp); 
    cp = (char *)malloc(100); 
    cp = buf; 
    printf("address cp -> buf   : %x\n", cp); 
    cp = buf2; 
    printf("address cp -> buf2  : %x\n", cp); 
} 
                    </screen> 
                    ´ÙÀ½Àº À§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŲ °á°úÀÌ´Ù.  
                    °á°ú °ªÀº ¶§¿Í Àå¼Ò¿Í ½Ã½ºÅÛ¿¡ µû¶ó ´Þ¶óÁú¼ö ÀÖ´Ù.  
                    (1, 2, 3, 4, ... ´Â ÇÊÀÚ°¡ ¼³¸íÀ» À§ÇØ ºÙÀÎ ¼ýÀÚÀÌ´Ù) 
                    <screen>    
[root@localhost test]# ./malloc2 
address ch           : bffff76c --- 1 
address ch -> buf    : bffff7f0 --- 2 
address buf          : bffff7f0 --- 3 
address buf -> first : bffff7f0 --- 4 
 
address cp not      : bffff768 --- 5 
address cp ->       : 0        --- 6 
address cp ->       : 8049860  --- 7 
address cp -> buf   : bffff7f0 --- 8 
address cp -> buf2  : bffff770 --- 9 
                    </screen>  
                    1 ¹ø °á°ú´Â Æ÷ÀÎÅÍ *ch °¡ ÇÒ´çµÈ °÷ÀÇ ÁÖ¼Ò°ªÀÌ´Ù.  
                    2 ¹ø °á°ú´Â *ch °¡ Æ÷ÀÎÅÍ(°¡¸®Å°´Â)ÇÏ´Â °÷ÀÇ Ã¹¹øÂ° ¸Þ¸ð¸® 
                    ÀÇ ÁÖ¼Ò°ªÀÌ´Ù. *ch °¡ °¡¸®Å°´Â °÷Àº buf °¡ ÀúÀåµÈ ¸Þ¸ð¸®ÀÇ  
                    ù¹øÂ° ÁÖ¼Ò °ªÀ̹ǷΠbffff7f0 ÀÌ ¼¼ÆÃµÇ¾ú´Ù. 3¹ø, 4¹ø °á°ú 
                    ´Â *ch °¡ ½ÇÁ¦ bufÀÇ ÁÖ¼Ò¸¦ °¡¸®Å°°í ÀÖÀ½À» È®ÀÎÇ챉  
                    À§ÇØ Ãâ·ÂÇÑ °ªÀÌ´Ù. ÀÌµé °á°ú¸¦ º¸¸é ½ÇÁ¦·Î Æ÷ÀÎÅͰ¡  
                    ¾î¶»°Ô °ªÀ» °¡¸®Å°°í ÀÖ´ÂÁö È®ÀÎÇÒ¼ö ÀÖÀ»°ÍÀÌ´Ù.    
                    <screen> 
  0 1 2 3       0 ....        100 
 +-+-+-+-+     +-+-+-+-+-+-+-+-+-+ 
 | ch    |     | buf             | 
 +-+-+-+-+     +-+-+-+-+-+-+-+-+-+ 
 bffff76c      bffff7f0 
  |             | 
  +-------------+ 
                    </screen> 
                </para> 
                <para> 
                    5 ¹øºÎÅÍ 8 ¹ø±îÁö´Â malloc()À» È£ÃâÇÔÀ¸·Î½á ¸Þ¸ð¸®  
                    ±¸¼ºÀÌ ½ÇÁ¦·Î ¾î¶»°Ô µÇ´ÂÁö¸¦ º¸¿©ÁØ´Ù.  
                    5 ¹øÀº cp °¡ À§Ä¡ÇÑ °÷ÀÇ ÁÖ¼ÒÀÌ´Ï±î º°·Î ½Å°æ¾µÇÊ¿ä´Â ¾ø´Ù.  
                    6 ¹øÀº malloc() ÇϱâÀü¿¡ *cp °¡ °¡¸®Å°°í ÀÖ´Â °÷ÀÇ  
                    ÁÖ¼Ò °ªÀ» º¸¿©Áִµ¥ ¸Þ¸ð¸® ÇÒ´çµÇ¾î ÀÖÁö¾ÊÀº°æ¿ìÀÌ´Ù.  
                    À§ÀÇ °æ¿ì NULL À» °¡¸®Å°°í Àִµ¥, À̰ÍÀº »óȲ¿¡ µû¶ó º¯ÇÑ´Ù.  
                    ´Ù½Ã ¸»Çؼ­ ¸Þ¸ð¸® ÇÒ´çÇÏÁö ¾Ê¾ÒÀ»°æ¿ì ÀÓÀÇÀÇ ¿µ¿ªÀ» °¡¸®Å²´Ù°í  
                    º¸¸é ¹«³­ÇÏ´Ù.   
                    7 ¹øÀÌ malloc()À» ÀÌ¿ëÇØ¼­ ¸Þ¸ð¸®  
                    ÇÒ´çÇÑÈÄ °¡¸®Å°´Â °÷ÀÇ ÁÖ¼ÒÀε¥, malloc() ÇϱâÀü°ú ºñ±³ÇØ  
                    º¸¸é °¡¸®Å°°í ÀÖ´Â °÷ÀÇ ÁÖ¼Ò°¡ ¸íÈ®ÇÏ°Ô Á¤ÇØÁ® ÀÖÀ½À» È®ÀÎÇÒ¼ö ÀÖ´Ù.    
                    8,9 ¹øÀº °¢°¢ buf ¿Í buf2 ¸¦ ´ëÀÔÇß´Ù.   
                    <screen> 
 malloc ÇϱâÀü 
  0 1 2 3  
 +-+-+-+-+ 
 | cp    | 
 +-+-+-+-+     ? 
  |            | 
  +------------+ 
  
 malloc ÇÑÈÄ 
  0 1 2 3           0 ...       100       0 ....        100 
 +-+-+-+-+         +-+-+-+-+-+-+-+-+     +-+-+-+-+-+-+-+-+-+ 
 | cp    |         |               |     | buf             | 
 +-+-+-+-+         +-+-+-+-+-+-+-+-+     +-+-+-+-+-+-+-+-+-+ 
                    8049860              bffff7f0 
  |                 | 
  +-----------------+ 
 
 buf¸¦ ´ëÀÔÇÑÈÄ  
 
  0 1 2 3           0 ...       100       0 ....        100          
 +-+-+-+-+         +-+-+-+-+-+-+-+-+     +-+-+-+-+-+-+-+-+-+         
 | ch    |         |               |     | buf             |         
 +-+-+-+-+         +-+-+-+-+-+-+-+-+     +-+-+-+-+-+-+-+-+-+         
 bffff7ec           8049860              bffff7f0                    
  |                                       | 
  +---------------------------------------+ 
                    </screen> 
                </para> 
                <section> 
                    <title>¸Þ¸ð¸®¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ¹Ýµå½Ã ÇÒ´çÇØ¾ß ÇÑ´Ù.</title> 
                    <para> 
                        ´ç¿¬ÇÑ ¾ê±âÀÌÁö¸¸ »ç¿ëÇϱâ À§Çؼ­´Â Àû´çÇÑ °ø°£À»  
                        ÇÒ´çÇØÁÖ¾î¾ß ÇÑ´Ù. ¹Ù·Î À§ÀÇ ±×¸²¿¡¼­ malloc ÇϱâÀü¿¡  
                        *cp °¡ °¡¸®Å°´Â ÁÖ¼Ò¸¦ º¸¸é »óȲ¿¡ µû¶ó ´Þ¶óÁø´Ù°í Çß´Ù.   
                        ±×·³À¸·Î ÇÒ´çµÇÁö ¾ÊÀº Æ÷ÀÎÅÍ¿¡ µ¥ÀÌŸ¸¦ ÀÔ·ÂÇÏ¸é  
                        ÀÓÀÇÀÇ ÁÖ¼Ò¿¡ ¾î¶² °ªÀ» ÀÔ·ÂÇÏ´Â ²ÃÀÌ µÈ´Ù.  
                        ¿îÀÌ ÁÁÀ¸¸é ÀÓÀÇÀÇ ÁÖ¼Ò ¿µ¿ª¿¡ µ¥ÀÌŸ¸¦ ÃæºÐÈ÷ ÀúÀåÇÒ °ø°£ÀÌ  
                        È®º¸µÇ¾î À־ ¿¡·¯¾øÀÌ ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ¼öµµ ÀÖÁö¸¸,  
                        ´Ù¸¥ ÇÁ·Î¼¼½º°¡ Â÷ÁöÇϰí ÀÖ´Â ¸Þ¸ð¸® ¿µ¿ªÀ» ħ¹üÇÒ¼öµµ ÀÖ´Ù.  
                        ÀÌ·²°æ¿ì ¸Þ¸ð¸® ¿µ¿ª¿¡ ´ëÇÑ  
                        ¿ì¼±±ÇÀº ¸ÕÀú ȹµæÇÑ ÇÁ·Î¼¼½º¿¡°Ô ÀÖÀ½À¸·Î, Ä¿³ÎÀº   
                        ÀÌ ¸Þ¸ð¸®¿µ¿ª¿¡ µ¥ÀÌŸ¸¦ ¾²·Á°í ÇÏ´Â ÇÁ·Î¼¼½º¸¦  
                        °­Á¦ Á¾·á½Ãų°ÍÀÌ´Ù(¼¼±×¸ÕÆ® ÆúÆ® ¿¡·¯)  
                    </para> 
                    <para> 
                        À§¿¡¼­ ¸Þ¸ð¸® ÇÒ´çÀ» ÇÏÁö ¾Ê¾ÒÀ½¿¡µµ ºÒ±¸Ç졒  
                        ÇÁ·Î±×·¥ÀÌ Á¦´ë·Î ½ÇÇàµÇ¸é ¿îÀÌ ÁÁÀº°æ¿ì¶ó°í Çߴµ¥,  
                        »ç½Ç À̰æ¿ì´Â ¿îÀÌ ÁÁÀº°æ¿ì°¡ ¾Æ´Ï°í  
                        ¿îÀÌ ³ª»Û°æ¿ì°¡ µÈ´Ù. ¾ð¶æ º¸±â¿¡ Á¤»óÀûÀ¸·Î  
                        ½ÇÇàµÇ´Â°Í ó·³ º¸Àϼö Àֱ⠶§¹®¿¡ µð¹ö±ë ÀÛ¾÷À»  
                        ¾î·Æ°Ô ¸¸µé¼ö Àֱ⠶§¹®ÀÌ´Ù(´Ù¸¥ ÇÁ·Î¼¼½ºÀÇ ¸Þ¸ð¸® ¿µ¿ªÀ»  
                        ħ¹üÇÒ °¡´É¼ºÀ» °¡Áö°í ÀÖ´Â ºÒ¿ÏÀüÇÑ ÄÚµåÀÌ´Ù).  
                        Àß µ¹´Ù°¡ ¾î´À³¯ ¾ÆÄ§¿¡ È®ÀÎÇØº¸´Ï±î ÇÁ·Î±×·¥ÀÌ  
                        Á×´Â °æ¿ì°¡ µÉ È®·üÀÌ ³ô´Ù. »ç¿ëÇÏ´Â ¸Þ¸ð¸®ÀÇ  
                        °ø°£ÀÌ ÀÛÀ»¼ö·Ï(Å©¸éÀº ´Ù¸¥ ¿µ¿ªÀ» ħ¹üÇÒ °¡´É¼ºÀÌ  
                        Å©´Ù) ¿î ÁÁ°Ô(³ª»Ú°Ô) Á¦´ë·Î ÀÛµ¿µÉ È®·üÀÌ Å©´Ù.     
                    </para> 
                    <para> 
                        ±×·¯¹Ç·Î ¾Æ·¡¿Í °°Àº ÄÚµå´Â ½É°¢ÇÏ°Ô À߸øµÈ  
                        ÄÚµåÀÌ´Ù.(¾Æ¸¶ ¾î¶²°æ¿ì¿¡´Â Á¦´ë·Î ½ÇÇàµÇ°í,  
                        ¾î¶² °æ¿ì¿¡´Â ¼¼±×¸ÕÆ® ÆúÆ®°¡ ¶³¾îÁú°ÍÀÌ´Ù)  
                        <screen> 
char *cp; 
 
memcpy(cp, "1234", 100); 
                        </screen> 
                        À§ÀÇ ÄÚµå´Â ¾Æ·¡¿Í °°ÀÌ ¹Ì¸® °ø°£À» ÇÒ´çÇÑÈÄ  
                        »ç¿ëÇϵµ·Ï Á¦ÀÛ¼º ÇØ¾ß ÇÑ´Ù.          
                        <screen> 
char *cp; 
 
cp = (char *)malloc(100); 
memcpy(cp, "1234", 100); 
                        </screen> 
                    </para> 
                </section> 
            </section> 
            <section> 
                <title>realloc</title> 
                <para> 
                    ¸Þ¸ð¸®ÀÇ Å©±â¸¦ Á¶Á¤ÇϰíÀÚ ÇÒ¶§ »ç¿ëÇÑ´Ù.  
                    ¿¡µðÅÍ ÇÁ·Î±×·¥À» ¿¹·Î µé¾îº¸ÀÚ¸é, 2°¡Áö ¸Þ¸ð¸® ÇÒ´çÀ»  
                    ÇÒ¼ö ÀÖÀ»°Çµ¥, ÆÄÀÏÀÇ Å©±â¸¦ ÀÐÀº´ÙÀ½ ÆÄÀÏÀÇ Å©±â¸¸Å­  
                    Çѹø¿¡ ¸Þ¸ð¸® ÇÒ´çÀ» ÇØ¹ö¸®´Â ¹æ¹ý°ú 1024 ¹ÙÀÌÆ® Á¤µµ·Î  
                    ÇÒ´çÇϰí, ÆÄÀÏÀ» ÀоîµéÀÌ´Ù°¡ 1024 ¸¦ ÃʰúÇÏ°Ô µÇ¸é,  
                    realloc ¸¦ ÀÌ¿ëÇØ¼­ 1024¸¦ ´õ ÇÒ´çÇØÁÖ´Â ¹æ¹ýÀÌ ÀÖ´Ù.    
                </para> 
                <para> 
                    ¾î´À°É »ç¿ëÇϵçÁö °ü°è´Â ¾øÁö¸¸, realloc Àº ±âº»ÇൿÀÌ  
                    ¸¸¾à ¿¬¼ÓµÈ ¸Þ¸ð¸® °ø°£ÀÌ ÃæºÐÇÏÁö ¾ÊÀ»°æ¿ì  
                    ¿¬¼ÓµÈ ¸Þ¸ð¸® °ø°£À» ÇÒ´çÇÒ¼ö ÀÖµµ·Ï »õ·Î °ø°£À» Àâ°Ô  
                    µÇ¸ç, ÀÌ¿ÍÁß¿¡ ±âÁ¸ÀÇ µ¥ÀÌŸ°¡ º¹»çµÇ¹Ç·Î »ó´çÈ÷  
                    ¸¹Àº ºñ¿ëÀÌ ¼Ò¸ðµÉ¼ö ÀÖ´Ù.(½ÇÁ¦ Å×½ºÆ® ÇØº¸¸é ¾Ë°ÚÁö¸¸  
                    malloc ¿¡ ºñÇØ¼­ ´«¿¡ ¶ç°Ô ¸¹Àº ½Ã°£ÀÌ ¼Ò¸ðµÈ´Ù)  
                </para> 
                <para> 
                    <emphasis>¿¹Á¦ : realloc.c</emphasis> 
                    <screen> 
#include <unistd.h> 
 
int main() 
{ 
    char *cp; 
    int i; 
 
    cp = (char *)malloc(100); 
    memcpy(cp, "111", 100); 
    printf("100     : %x\n", cp); 
    cp = (char *)realloc(cp, 10000); 
    printf("10000   : %x\n", cp); 
    cp = (char *)realloc(cp, 1000000); 
    printf("1000000 : %x\n", cp); 
    printf("Value is (%s)\n", cp); 
} 
                    </screen> 
                    ´ÙÀ½Àº À§ÀÇ ¿¹Á¦¸¦ ½ÇÇà½ÃŲ °á°úÀÌ´Ù.  
                    <screen> 
[root@localhost doc]# ./realloc 
100     : 8049770 
10000   : 8049770 
1000000 : 4015e008 
Value is (111) 
                    </screen> 
                     À§ÀÇ °ªÀº »óȲ¿¡ µû¶ó º¯ÇÒ¼ö ÀÖ´Ù. 100, 10000 Àº  
                    °°Àº ¸Þ¸ð¸® ÁÖ¼Ò¸¦ »ç¿ëÇϰí ÀÖÁö¸¸, 1000000 ÀÌ µÇ¸é¼­  
                    ¸Þ¸ð¸®ÀÇ À§Ä¡°¡ º¯°æµÇ¾úÀ½À» ¾Ë¼ö ÀÖ´Ù. ¾Æ¹«·¡µµ 100 °ú  
                    10000 ÀÇ °æ¿ì ±×¸® Å«Â÷À̰¡ ³ªÁö ¾Ê±â ¶§¹®¿¡ ÇöÀç  
                    À§Ä¡¿¡¼­ ¿¬¼ÓµÈ ¸Þ¸ð¸® °ø°£À» È®º¸ÇϱⰡ ¼ö¿ùÇÏÁö¸¸  
                    °ªÀÌ Ä¿Áú¼ö·Ï ¿¬¼ÓµÈ ¸Þ¸ð¸® °ø°£À» È®º¸°¡ ¾î·Á¿öÁö±â  
                    ¶§¹®¿¡, ¾î¿¼ö ¾øÀÌ ¸Þ¸ð¸® À̵¿ÀÌ ÀϾ°Ô µÈ´Ù.  
                    ¸Þ¸ð¸® À§Ä¡ À̵¿ÀÌ ÀϾ´Ù ÇÏ´õ¶óµµ °ªÀº ±×´ë·Î º¹»çµÇ°í  
                    ÀÖÀ½À» ¾Ë¼ö ÀÖ´Ù.     
                </para> 
            </section> 
            <section> 
                <title>sizeof</title> 
                <para> 
                    sizeof ´Â C ¿¡¼­ Á¦°øÇϴ Ű¿öµå·Î ÇØ´ç ÀÚ·áÇüÀÇ Å©±â¸¦  
                    µ¹·ÁÁØ´Ù. sizeof ´Â ¸Þ¸ð¸® ÇÒ´ç¿¡ À־ ²Ï Áß¿äÇÑ ¿ªÇÒÀ»  
                    °¡Áø´Ù. ÀÌÀ¯´Â °¢ ÀÚ·áÇü¸¶´Ù Â÷ÁöÇÏ´Â byte Å©±â°¡ Ʋ¸®°í,  
                    °°Àº ÀÚ·áÇüÀ̶ó ÇÒÁö¶óµµ ¿î¿µÃ¼Á¦¿¡ µû¶ó ±× Å©±â°¡  
                    ´Þ¶óÁú¼ö Àֱ⠶§¹®ÀÌ´Ù. ¿¹¸¦µé¾î int Çü ÀÚ·á 4°³¸¦  
                    ÀúÀåÇϱâ À§Çؼ­ ´ÙÀ½°ú °°ÀÌ  
                    ¸Þ¸ð¸® Å©±â¸¦ ÇÒ´çÇß´Ù°í ÇÏÀÚ.     
                    <screen> 
int *ip; 
 
ip = (int *)malloc(16); 
                    </screen> 
                    int ÇüÀº º¸ÅëÀÇ °æ¿ì 4byte ÀÌ´Ï±î  
                    4°³ÀÇ ÀڷḦ ÀúÀåÇϱâ À§Çؼ­ 
                    ´Â 16 ¸¸Å­ÀÇ Å©±â°¡ ÇÊ¿äÇÑ°Ç È®½ÇÇÏ´Ù.  
                    ±×·¯³ª int ÇüÀÇ Å©±â°¡  
                    4byte ÀΰÍÀº º¸ÅëÀÇ °æ¿ìÀ̰í 2byte ȤÀº 8byte ÀÎ °æ¿ì°¡      
                    ÀÖÀ»¼öµµ ÀÖ´Ù. ±×·²°æ¿ì À§ÀÇ ÇÁ·Î±×·¥Àº ÇöÀç ¿î¿µÃ¼Á¦¿¡¼­´Â 
                     ¹®Á¦ ¾ø°ÚÁö¸¸, ´Ù¸¥ ¿î¿µÃ¼Á¦·Î Æ÷ÆÃÇϰíÀÚ  
                    ÇÒ¶§ ¹®Á¦°¡ µÉ¼öµµ ÀÖ´Ù.   
                </para> 
                <para> 
                    ÀÌ·± ¹®Á¦¸¦ ¾ø¾Ö±â À§Çؼ­ sizeof Ű¿öµå¸¦ Á¦°ø¹Þ¾Æ¼­  
                    »ç¿ëÇÑ´Ù. ÀÌ Å°¿öµå¸¦ »ç¿ëÇÏ¸é ¿î¿µÃ¼Á¦¿¡¼­  
                    »ç¿ëÇÏ´Â ÀÚ·áÇüÀÇ Å©±â¸¦ µ¹·ÁÁÖ°Ô  
                    µÊÀ¸·Î À§¿¡¼­¿Í °°Àº ¹®Á¦Á¡ÀÌ  
                    ¹ß»ýÇÏÁö ¾Ê´Â´Ù.   
                    <screen> 
int *ip; 
 
ip = (int *)malloc(sizeof(int)*4); 
 
printf("int size is %d\n", sizeof(int)); 
                    </screen> 
                    int ÀÚ·áÇüÀ» À§Çؼ­ 4byte °ø°£À» ÇÊ¿ä·Î ÇÏ´Â ¿î¿µÃ¼Á¦¶ó¸é  
                    16, 8byte ¸¸Å­À» ÇÊ¿ä·Î ÇÏ´Â ¿î¿µÃ¼Á¦¶ó¸é 32byte ¸¸Å­À»  
                    ÇÒ´ç¹ÞÀ»¼ö ÀÖ°Ô µÉ°ÍÀÌ´Ù.   
                </para> 
            </section> 
            <section> 
                <title>free</title> 
                <para> 
                    malloc() Àº ¸Þ¸ð¸® ÇÒ´çÀ» Ä¿³Î¿¡ ¿äûÇÏ´Â ½Ã½ºÅÛ ÇÔ¼öÀÌ´Ù.  
                    ±×·¯¹Ç·Î ÀÏ´Ü malloc()¿¡ ÀÇÇØ¼­ ÇÒ´ç¹ÞÀº ¸Þ¸ð¸®´Â  
                    ÇÁ·Î¼¼½º°¡ Á¾·áµÉ¶§±îÁö Ä¿³Î¿¡ ÀÇÇØ¼­ º¸È£¹Þ°Ô µÈ´Ù.  
                </para> 
                <para> 
                    À̸»Àº malloc() ¸¦ À߸ø »ç¿ëÇÒ°æ¿ì ¾µµ¥¾ø´Â  
                    ¸Þ¸ð¸® °ø°£ÀÇ ³¶ºñ 
                    ¸¦ °¡Á® ¿Ã¼ö ÀÖÀ¸¸ç, ½É°¢ÇÒ°æ¿ì ¸Þ¸ð¸® ´©¼ö¸¦ °¡Á®¿Ã¼ö  
                    ÀÖ´Ù´Â ¶æÀ̵ȴÙ. ´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ 
                </para> 
                <para> 
                    <emphasis>warn_mem.c</emphasis> 
                    <screen> 
#include <unistd.h> 
 
int main() 
{ 
 
    char *cp; 
 
    while(1) 
    { 
        cp = (char *)malloc(10000); 
        printf("%x\n", cp); 
        sleep(1); 
    } 
} 
                    </screen> 
                    À§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄѺ¸¸é, ¿î¿µÃ¼Á¦¿¡¼­ °è¼ÓÀûÀ¸·Î  
                    100byte Å©±âÀÇ »õ·Î¿î ¸Þ¸ð¸® °ø°£À» ÇÁ·Î¼¼½º¿¡°Ô ÇÒ´çÇØ  
                    Áִ°ÍÀ» º¼¼ö ÀÖ´Ù.   
                    <screen> 
[root@localhost doc]# ./warn_mem 
8049690 
8061d38 
807a3e0 
8092a88 
80ab130 
80c37d8 
                    </screen> 
                    ½ÇÁ¦ warn_mem ÀÇ ½ÇÇà°á°ú ¸Þ¸ð¸® ´©¼ö°¡ »ý±â´ÂÁö  
                    È®ÀÎÀ» À§Çؼ­ °£´ÜÇÑ ½ºÅ©¸³Æ®¸¦ ¸¸µé¾î¼­ Å×½ºÆ®¸¦ ÇØº¸µµ·Ï  
                    ÇÏÀÚ.  
                    <screen> 
[root@coco /root]# while [ 1 ] 
> do  
> ps -aux | grep warn_mem | grep -v vi | grep -v grep 
> sleep 1 
> done 
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND 
root     11719  0.0  0.3  1436  400 ttypc    S    11:24   0:00 ./warn_mem 
root     11719  0.0  0.3  1636  408 ttypc    S    11:24   0:00 ./warn_mem 
root     11719  0.0  0.3  1736  412 ttypc    S    11:24   0:00 ./warn_mem 
root     11719  0.0  0.3  1836  416 ttypc    S    11:24   0:00 ./warn_mem 
root     11719  0.0  0.3  1936  420 ttypc    S    11:24   0:00 ./warn_mem 
root     11719  0.0  0.3  2036  424 ttypc    S    11:24   0:00 ./warn_mem 
root     11719  0.0  0.3  2236  432 ttypc    S    11:24   0:00 ./warn_mem 
root     11719  0.0  0.3  2336  436 ttypc    S    11:24   0:00 ./warn_mem 
                    </screen> 
                     ps ÀÇ Çì´õ ºÎºÐÀº ¿ø·¡ ½ºÅ©¸³Æ®ÀÇ ½ÇÇà°á°ú¿¡´Â Ç¥½ÃµÇÁö  
                    ¾ÊÁö¸¸ ps °á°úÀÇ ÇÊµå ±¸ºÐÀ» ½±°Ô Çϱâ À§Çؼ­ Ãß°¡ ½ÃÄ×´Ù.  
                    À§ÀÇ °á°ú¸¦ º¸¸é warn_mem ÇÁ·Î¼¼½º¿¡¼­ Á¡À¯ÇÏ´Â ¸Þ¸ð¸®ÀÇ  
                    Å©±â°¡ Áö¼ÓÀûÀ¸·Î Áõ°¡µÇ°í ÀÖÀ½À» º¼¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¸Þ¸ð¸®  
                    ´©¼ö´Â ÇÁ·Î±×·¥¿¡¼­ ¸Å¿ì Ä¡¸íÀûÀϼö ÀÖ´Ù.  
                    ƯÈ÷ ÀÌ·¯ÇÑ Á¾·ùÀÇ  
                    ¹®Á¦´Â ÄÄÆÄÀÏ·¯¿¡¼­ 󸮸¦ ÇØÁÖÁö ¾Ê±â ¶§¹®¿¡ ³ªÁß¿¡  
                    ¹®Á¦Á¡À» ã±â°¡ ¸Å¿ì °ï¶õÇØÁø´Ù. ÈçÈ÷ ¸»ÇÏ´Â ¸îÀÏ Àßµ¹´Ù°¡  
                    Á×´Â ÇÁ·Î±×·¥ÀÌ µÉ °¡¸Á¼ºÀÌ Å©´Ù. 
                </para> 
                <para> 
                    ±×·¯¹Ç·Î »ç¿ëÇÏÁö ¾Ê´Â ¸Þ¸ð¸®°ø°£Àº ¹Ýµå½Ã ¿î¿µÃ¼Á¦¿¡°Ô  
                    µÇµ¹·Á ÁÖ¾î¾ß ÇÑ´Ù. C ´Â µ¿ÀûÀ¸·Î ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ ÇØÁ¦¸¦  
                    À§Çؼ­ free() ¸¦ Á¦°øÇÑ´Ù.   
                    ´ÙÀ½Àº warn_mem.c ÀÇ ¸Þ¸ð¸® ´©¼ö ¹®Á¦¸¦ free() ¸¦ ÅëÇØ¼­  
                    ÇØ°áÇÑ ÄÚµåÀÌ´Ù.   
                </para> 
                <para> 
                    <emphasis>free_mem.c</emphasis> 
                    <screen> 
#include <unistd.h> 
 
int main() 
{ 
 
    char *cp; 
 
    while(1) 
    { 
        cp = (char *)malloc(100000); 
        printf("%x\n", &(*cp)); 
        sleep(1); 
        free(cp); 
    } 
} 
                    </screen> 
                    À§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½Ã۰í, Å×½ºÆ®¸¦ ÇØº¸¸é ±âÁ¸¿¡  
                    ÀÖ´ø ¸Þ¸ð¸® ´©¼ö Çö»óÀÌ »ç¶óÁ³À½À» È®ÀÎÇÒ¼ö ÀÖÀ»°ÍÀÌ´Ù.  
                </para> 
            </section> 
        </section> 
    </section> 
</section> 
 
<section> 
    <title>µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀÇ ÀÀ¿ë</title> 
    <para> 
        À̹øÀå¿¡¼­´Â µ¿Àû¸Þ¸ð¸® ÇÒ´çÀÇ ÀÀ¿ë ¿¹Á¦¸¦ ¸¸µé¾î º¼°ÍÀÌ´Ù.  
        ¸¸µé ÀÀ¿ë ¿¹Á¦´Â linked list ÀÌ´Ù.  
    </para> 
    <section> 
        <title>¸µÅ©µå ¸®½ºÆ® ¿¡ ´ëÇØ¼­</title> 
        <para> 
            ¸µÅ©µå ¸®½ºÆ®´Â ±×¸® °£´ÜÈ÷ ´Ù·ê¼ö ÀÖ´Â ÁÖÁ¦°¡ ¾Æ´Ï´Ù.  
            ¸µÅ©µå ¸®½ºÆ®¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº ÀڷᱸÁ¶¸¦ ´Ù·ê ±âȸ°¡ ÀÖÀ¸¸é  
            ±×¶§ Çϱâ·Î Çϰí, ¿©±â¿¡¼­´Â °³³äÁ¤µµ¸¸ ¼³¸íÇϵµ·Ï ÇϰڴÙ.   
        </para> 
        <para> 
            ¸µÅ©µå ¸®½ºÆ®´Â ¸»±×´ë·Î ¸®½ºÆ®¸¦ ¸¸µé±â À§Çؼ­ »ç¿ëµÇ´Â  
            ÀڷᱸÁ¶ÀÌ´Ù. ¸®½ºÆ®¸¦ ¸¸µé±â À§Çؼ­´Â ÀÚ·áÀÇ ¿¬¼ÓµÈ ¼ø¼­¸¦  
            ¸¸µé¾î Áà¾ß ÇÑ´Ù. ±×·²·Á¸é ´ÙÀ½ÀÚ·áÀÇ Á¤º¸°¡ ¹«¾ùÀÎÁö¸¦  
            ¾Ë¾Æ¾ß Çϴµ¥, ¸µÅ©µå ¸®½ºÆ®¶õ ´ÙÀ½ÀÚ·áÀÇ Á¤º¸°¡ ¹«¾ùÀÎÁö¸¦  
            ¾Ë°í ÀÖ´Â ±¸Á¶¸¦ ¸»ÇÑ´Ù. ¿©±â¼­ ´ÙÀ½ÀÚ·áÀÇ Á¤º¸¶õ ´ÙÀ½ ÀÚ·á°¡  
            À§Ä¡Çϰí ÀÖ´Â ÁÖ¼ÒÀÇ °ªÀÌ µÉ°ÍÀÌ´Ù.      
            <screen> 
 P: Pointer 
 +--------++-+   +--------++-+   +--------++-+ 
 | Data 1 ||P|   | Data 2 ||P|   | Data 3 ||P| 
 +--------++-+   +--------++-+   +--------++-+ 
            |     |         |     | 
            +-----+         +-----+ 
            </screen> 
            ´ëÃæ À§¿Í °°Àº ¹æ½ÄÀ¸·Î ¿¬°áµÈ´Ù. ¸®½ºÆ®¸¦ ÀÌ·ç°í ÀÖ´Â  
            ¸®½ºÆ® ¸â¹öµéÀº ½ÇÁ¦ Data ¿Í ´õºÒ¾î ´ÙÀ½ µ¥ÀÌŸÀÇ ÁÖ¼ÒÁ¤º¸¸¦  
            °¡Áö°í ÀÖ´Â Pointer À» °¡Áö°í ÀÖÀ¸¸ç, ÇÁ·Î±×·¡¸Ó´Â ÀÌ  
            Pointer Á¤º¸¸¦ ÀÌ¿ëÇØ¼­, µ¥ÀÌŸ¿¡ Á¢±ÙÇÒ¼ö ÀÖ°Ô µÈ´Ù.  
            À§ÀÇ ±×¸²À» º¸¸é ¾Ë°ÚÁö¸¸ Data 3 ¿¡ Á¢±ÙÇϱâ À§Çؼ­´Â  
            Data 1 ¹øºÎÅÍ ¼øÂ÷ÀûÀ¸·Î Á¢±ÙÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ¾Ë¼ö ÀÖ´Ù.   
        </para> 
    </section> 
    <section> 
        <title>µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀ» ÅëÇÑ ¸µÅ©µå ¸®½ºÆ®ÀÇ ±¸Çö</title> 
        <para> 
            À§¿¡¼­ ¸»ÇßÁö¸¸ ÀڷᱸÁ¶ ÀÚüÀÇ ¼³¸íÀ» ¸ñÀûÀÌ ¾Æ´Ñ °ü°è·Î  
            °¡Àå ´Ü¼øÇÑ ÇüÅÂÀÇ ¸µÅ©µå ¸®½ºÆ®¸¦ ±¸ÇöÇϵµ·Ï ÇϰڴÙ.  
            ÀÌ ¸µÅ©µå ¸®½ºÆ®´Â ´ÙÀ½°ú °°Àº ±â´ÉÀ» °¡Áø´Ù.  
            <variablelist>         
                <varlistentry> 
                    <term>µ¥ÀÌŸ »ðÀÔ</term> 
                    <listitem> 
                    <para> 
                        ¸â¹ö µ¥ÀÌŸ¸¦ »ðÀÔÇÑ´Ù. ÃÖÃÊ µ¥ÀÌŸ°¡ »ðÀԵɶ§´Â  
                        ´ÙÀ½ µ¥ÀÌŸ°¡ ¾øÀ½À¸·Î ´ÙÀ½µ¥ÀÌŸ¸¦ °¡¸®Å°´Â  
                        Pointer Àº NULL ÀÌ µÉ°ÍÀÌ´Ù. ¸¸¾à µÎ¹øÂ° µ¥ÀÌŸ°¡  
                        µé¾î¿Â´Ù¸é ù¹øÂ° µ¥ÀÌŸÀÇ Pointer Àº µÎ¹øÂ°  
                        µ¥ÀÌŸÀÇ À§Ä¡¸¦ °¡¸®Å°°Ô µÉ°ÍÀÌ´Ù.   
                    </para> 
                    </listitem> 
                </varlistentry> 
                <varlistentry> 
                    <term>µ¥ÀÌŸ »èÁ¦</title> 
                    <listitem> 
                    <para> 
                        µ¥ÀÌŸ »èÁ¦¸¦ Á¦´ë·Î ±¸ÇöÇϰíÀÚ ÇÑ´Ù¸é, ã±âÈÄ  
                        »èÁ¦¸¦ ±¸ÇöÇØ¾ß ÇϰÚÀ¸³ª ¿©±â¿¡¼­´Â POP ½ºÅ¸ÀÏÀÇ  
                        »èÁ¦¸¦ ±¸ÇöÇϵµ·Ï ÇÑ´Ù.(°¡Àå ¸ÕÀú µé¾î¿Â µ¥ÀÌŸ°¡  
                        °¡Àå ¸ÕÀú »èÁ¦µÇ´Â ¹æ½Ä)  
                    </para> 
                    </listitem> 
                </varlistentry> 
                <varlistentry> 
                    <term>µ¥ÀÌŸ Ãâ·Â</title> 
                    <listitem> 
                    <para> 
                        ¿ª½Ã °£´ÜÇÏ°Ô Ã³À½ÀÇ ¸®½ºÆ® ¸â¹öºÎÅÍ ¼øÂ÷ÀûÀ¸·Î  
                        °Ë»öÇØ°¡¸é¼­ µ¥ÀÌŸ¸¦ Ãâ·ÂÇÏ´Â ¹æ½ÄÀ¸·Î ±¸ÇöÇÒ  
                        °ÍÀÌ´Ù.  
                    </para> 
                    </listitem> 
                </varlistentry> 
            </variablelist>     
            À§ÀÇ 3°¡Áö ±¸ÇöÀº ¸µÅ©µå ¸®½ºÆ® »Ó¸¸ ¾Æ´Ï¶ó ´Ù¸¥ ÀڷᱸÁ¶¿¡¼­µµ  
            °¡Àå ±âº»ÀÌ µÇ´Â°ÍµéÀ̸ç À§ÀÇ ±¸Çö¹æ½ÄÀÇ ¾à°£ ´Ù¸¥ ÀÀ¿ëÀ¸·Î  
            ¸¸µé¾îÁø´Ù. Á»´õ ³­À̵µ ÀÖ´Â ±¸ÇöÀº °¢ÀÚ °øºÎ»ï¾Æ¼­ ÇØº¸±â  
            ¹Ù¶õ´Ù.   
        </para> 
    </section> 
    <section> 
        <title>¿¹Á¦</title> 
        <para> 
            <emphasis>linked_list.c</emphasis> 
            <screen> 
#include <unistd.h> 
#include <string.h> 
 
typedef struct 
{ 
    char name[12]; 
    struct list_item *next_link; 
} list_item; 
 
list_item * add_item(list_item *, char *); 
list_item * remobe_item(list_item *); 
void print_list(list_item *item); 
 
int main() 
{ 
    list_item *list; 
 
    list = NULL; 
 
    list = add_item(list, "yundream"); 
    list = add_item(list, "kknd2"); 
    list = add_item(list, "hohoho"); 
    list = add_item(list, "loveisall"); 
    print_list(list); 
 
    printf("\n"); 
    list = remove_item(list); 
    print_list(list); 
} 
 
list_item * add_item(list_item *item, char *name) 
{ 
    list_item *lp = item; 
 
    // ±âÁ¸¿¡ Item ÀÌ ÀÖÀ»°æ¿ì  
    // °¡Àå ÃÖ±ÙÀÇ ItemÀÇ next_link °¡ Ãß°¡ µÇ´Â Item ÀÇ  
    // ÁÖ¼Ò¸¦ °¡¸®Å°µµ·Ï Æ÷ÀÎÅ͸¦ Á¶Á¤ÇÑ´Ù.   
    if (item != NULL) 
    { 
        while(item->next_link != NULL) 
            item = item->next_link; 
 
        item->next_link = (struct list_item *)malloc(sizeof(list_item)); 
        item = item->next_link; 
        strcpy(item->name, name); 
        return lp; 
    } 
    // óÀ½ Item Ãß°¡½Ã¿¡´Â °¡¸®Å³ µ¥ÀÌŸ°¡ ¾øÀ½À¸·Î  
    // next_link ´Â NULL ÀÌ µÈ´Ù.   
    else 
    { 
        item = (struct list_item *)malloc(sizeof(list_item)); 
        item->next_link = NULL; 
        strcpy(item->name, name); 
        return item; 
    } 
} 
 
list_item * remove_item(list_item *item) 
{ 
    list_item *tmp; 
    printf("Element remove is %s\n", item->name); 
    // ù¹øÂ° ¸µÅ©°¡ °¡¸®Å°´Â ´ÙÀ½ µ¥ÀÌŸ   
    // Áï µÎ¹øÂ° µ¥ÀÌŸÀÇ Á¤º¸¸¦ tmp ¿¡ ´ëÀÔÇ졒  
    // ù¹øÂ° µ¥ÀÌŸ¸¦ free ½ÃÄÑÁÜÀ¸·Î  
    // ¸µÅ©µå ¸®½ºÆ®¿¡¼­ Á¦°Å½ÃŲ´Ù.  
    tmp = item->next_link; 
    free(item); 
    return tmp; 
} 
 
void print_list(list_item *item) 
{ 
    if (item == NULL) 
        printf("NONE LIST\n"); 
 
    // Item ÀÇ Ã³À½ºÎÅÍ ³¡±îÁö ¼øÂ÷ÀûÀ¸·Î  
    // °Ë»öÇϸ鼭 µ¥ÀÌŸ¸¦ Ãâ·Â½ÃŲ´Ù.  
    else 
        while(item != NULL) 
        { 
            printf("%10s : %x %x\n", 
                            item->name, 
                            item, 
                            item->next_link); 
            item = item->next_link; 
        } 
} 
            </screen> 
        </para> 
        <para> 
            ´ÙÀ½Àº ÇÊÀÚÀÇ ÄÄÇ»ÅÍ¿¡¼­ ½ÇÇà½ÃŲ °á°ú´Ù. ¹øÈ£´Â ¼³¸íÀ» À§Çؼ­  
            ºÙÀΰÍÀÌ´Ù.   
            <screen> 
[root@localhost test]# ./linked_list  
  yundream : 80498a0 80498b8 --- 1 
     kknd2 : 80498b8 80498d0 --- 2 
    hohoho : 80498d0 80498e8 --- 3 
 loveisall : 80498e8 0       --- 4 
 
Element remove is yundream 
     kknd2 : 80498b8 80498d0 
    hohoho : 80498d0 80498e8 
 loveisall : 80498e8 0 
            </screen> 
            2°³ÀÇ ÁÖ¼Ò°ªÀÌ Ãâ·ÂµÇ´Âµ¥, ù¹øÂ° ÁÖ¼Ò°ªÀº ÀÚ½ÅÀÇ ÁÖ¼Ò°ªÀÌ°í  
            2¹øÂ° ÁÖ¼Ò°ªÀº ´ÙÀ½ °¡¸®Å°´Â µ¥ÀÌŸÀÇ ÁÖ¼Ò°ªÀÌ´Ù. º¸¸é  
            1 -> 2 -> 3 -> 4 ÀÇ ½ÄÀ¸·Î µ¥ÀÌŸ¸¦ °¡¸®Å°°í ÀÖÀ½À» ¾Ë¼ö ÀÖ´Ù.    
        </para> 
    </section> 
</section> 
</article> 
 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.