# [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]
: ๋ค ์ฌ์ฉํ๋ฉด ๊ผญ ๋ฉ๋ชจ๋ฆฌ ํด์