์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

๋ถ€์ŠคํŠธ์ฝ”๋”ฉ ๋‰ด๋น„์ฑŒ๋ฆฐ์ง€ ์Šคํ„ฐ๋”” 6์ฃผ์ฐจ : realloc

IT/์Šคํ„ฐ๋””

by J KIMS 2020. 9. 12. 09:54

๋ณธ๋ฌธ

๋ฐ˜์‘ํ˜•

ํฌ์ธํ„ฐ์˜ ์›๋ฆฌ๋ฅผ ์„ค๋ช…ํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ค‘ ํ•œ ์žฅ๋ฉด. ๋Š˜ ์žฌ๋ฐŒ๋Š” ์ž๋ฃŒ๋ฅผ ์†Œ๊ฐœํ•ด์ฃผ๋Š” cs50 ๊ฐ•์˜ ๐Ÿ‘

๐Ÿ’ก realloc

: realloc ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒˆ๋กœ ํ• ๋‹นํ•œ๋‹ค๋Š” ์˜๋ฏธ. ์ด๋ฏธ ํ• ๋‹น๋ฐ›์€ ๊ธฐ์กด ๋ฉ”๋ชจ๋ฆฌ ๋ฉ์–ด๋ฆฌ๋ฅผ ์›๋ž˜๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ์ž‘๊ฒŒ ๋ฐ”๊พธ๋Š” ์ž‘์—…์„ ํ•จ. <stdlib.h> ํ—ค๋”ํŒŒ์ผ์— ํฌํ•จ๋˜์–ด์žˆ์Œ.

 

์•„๋ž˜ ์ฝ”๋“œ๋Š” ํฌ๊ธฐ๊ฐ€ intํ˜• ์„ธ๊ฐœ์ธ ๋ฐฐ์—ด์„ realloc์„ ์ด์šฉํ•ด 4๊ฐœ๋กœ ๋Š˜๋ฆฐ๊ฒƒ.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int *list = malloc(3 * sizeof(int));
    if (list == NULL)
    {
        return 1;
    }

    list[0] = 1;
    list[1] = 2;
    list[2] = 3;

    // tmp ํฌ์ธํ„ฐ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  list์˜ ๊ฐ’ ๋ณต์‚ฌ
    int *tmp = realloc(list, 4 * sizeof(int));
    if (tmp == NULL)
    {
        return 1;
    }

    // list์˜ ํฌ์ธํ„ฐ๊ฐ€ tmp์™€ ๊ฐ™์€ ๊ณณ์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ 
    list = tmp;

    // ์ƒˆ๋กœ์šด list์˜ ๋„ค ๋ฒˆ์งธ ๊ฐ’ ์ €์žฅ
    list[3] = 4;

    // list ๊ฐ’ ์ถœ๋ ฅ
    for (int i = 0; i < 4; i++)
    {
        printf("%d\n", list[i]);
    }


    //list ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ธฐํ™”
    free(list);
}

 ์ด๋ฏธ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ๋•Œ ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒˆ๋กœ ํ• ๋‹นํ•ด์ค˜์•ผ ํ•˜๋Š” ์ด์œ ๋Š”,

๊ธฐ์กด์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‹ค์Œ ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์˜ ์˜์—ญ์— ์นจ๋ฒ”ํ•  ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ๊ธฐ์กด์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•จ๋ถ€๋กœ ๋Š˜์ด๊ฑฐ๋‚˜ ํ•  ์ˆ˜ ์—†๋‹จ ์–˜๊ธฐ)

 

ํ• ๋‹น ๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ๋‹ค์Œ ๊ณต๊ฐ„์ด ์ด๋ฏธ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋“ค๋กœ ์ฑ„์›Œ์ ธ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค

 

๋”ฐ๋ผ์„œ ์ƒˆ๋กœ์šด ๊ณต๊ฐ„์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์ฃผ๊ณ  ๊ธฐ์กด์˜ ๋ฐฐ์—ด๊ฐ’๋“ค์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒŒ ์•ˆ์ „ํ•˜๋‹ค.

 

 

 

โ€ป ์ด ๊ธ€์€ edwith์˜ [๋ถ€์ŠคํŠธ์ฝ”์Šค] ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ปดํ“จํ„ฐ ๊ณผํ•™์„ ๋“ฃ๊ณ  ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ

๋Œ“๊ธ€ ์˜์—ญ