# [C] ๋™์ ํ• ๋‹น



ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ

Heap ์˜์—ญ์— ํ• ๋‹นํ•œ๋‹ค


  • <stdlib.h> ํ—ค๋” ํŒŒ์ผ์„ include ํ•ด์•ผํ•œ๋‹ค.

  • # ํ•จ์ˆ˜(Function)

    • # ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํ•จ์ˆ˜ : malloc

      • void* malloc(size_t size)

      • ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์€ size_t ํฌ๊ธฐ๋งŒํผ ํ• ๋‹นํ•ด์ค€๋‹ค.


  • # ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ์ดˆ๊ธฐํ™” : calloc

    • void* calloc(size_t nelem, sizeo_t elsize)

    • ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” ๋ฐฐ์—ด์š”์†Œ ๊ฐœ์ˆ˜, ๋‘๋ฒˆ์งธ ์ธ์ž๋Š” ๊ฐ ๋ฐฐ์—ด์š”์†Œ ์‚ฌ์ด์ฆˆ

    • ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”


  • # ๋ฉ”๋ชจ๋ฆฌ ์ถ”๊ฐ€ ํ• ๋‹น : realloc

    • void* realloc(void *ptr, size_t size)

    • ์ด๋ฏธ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ์— ์ถ”๊ฐ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น (์ด์ „ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ์—†์–ด์ง)


  • # ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ํ•จ์ˆ˜ : free

    • void free(void* ptr)

    • ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ



# ์ค‘์š”

ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ ํ•ด์ œํ•˜์ž (ํ•ด์ œ์•ˆํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ฆญ, ๋ˆ„์ˆ˜ ๋ฐœ์ƒ)


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

int main(void) {
    int arr[4] = { 4, 3, 2, 1 };
    int* pArr;
    
    // ๋™์ ํ• ๋‹น : int ํƒ€์ž…์˜ ์‚ฌ์ด์ฆˆ * 4๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น
    pArr = (int*)malloc(sizeof(int)*4);
    
    if(pArr == NULL) { // ํ• ๋‹นํ• ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
        printf("malloc error");
        exit(1);
    }
    
    for(int i = 0; i < 4; ++i) {
        pArr[i] = arr[i];
    }
    
    for(int i = 0; i < 4; ++i) {
        printf("%d \n", pArr[i]);
    }
    
    // ํ• ๋‹น ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
    free(pArr);
    
    return 0;
}

  • ๋™์ ํ• ๋‹น ๋ถ€๋ถ„ : pArr = (int*)malloc(sizeof(int)*4);

    • (int*) : malloc์˜ ๋ฐ˜ํ™˜ํ˜•์ด void*์ด๋ฏ€๋กœ ํ˜•๋ณ€ํ™˜

    • sizeof(int) : sizeof๋Š” ๊ด„ํ˜ธ ์•ˆ ์ž๋ฃŒํ˜• ํƒ€์ž…์„ ๋ฐ”์ดํŠธ๋กœ ์—ฐ์‚ฐํ•ด์คŒ

    • *4 : 4๋ฅผ ๊ณฑํ•œ ์ด์œ ๋Š”, arr[4]๊ฐ€ ๊ฐ€์ง„ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด

    • free[pArr] : ๋‹ค ์‚ฌ์šฉํ•˜๋ฉด ๊ผญ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ



# [์ฐธ๊ณ  ์ž๋ฃŒ]

์ตœ์ข… ์ˆ˜์ • : 12/17/2022, 7:23:59 AM