๊ตฌ์กฐ์ฒด ํฌ์ธํฐ
์ง๋ ์๊ฐ ์ฐ๋ฆฌ๋ ๊ตฌ์กฐ์ฒด์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์์๋ณด์๋ค.
์ด๋ฒ ์๊ฐ์๋ ๊ตฌ์กฐ์ฒด๋ฅผ ์กฐ๊ธ ๋ ํจ์จ์ ์ผ๋ก ์ธ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๋๋ก ํ์.
์ง๋ ์๊ฐ์ ์ด์ผ๊ธฐํ ๊ตฌ์กฐ์ฒด์ ๋ํด์ ํ ์ค๋ก ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
๊ตฌ์กฐ์ฒด๋ ์ฌ๋ฌ ์๋ฃํ์ด ๋ชจ์ฌ ํ๋์ ํฐ ์ฌ์ฉ์ ์ ์ ์๋ฃํ์ ๊ตฌ์ฑํ๋ ๊ฒ
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ์๊ฐํด๋ณผ๋งํ ์ฃผ์ ๊ฐ ๋ฐ๋ก ํฐ ์๋ฃํ์ด ๋๋ค๋ ๊ฒ์ด๋ค.
๊ตฌ์กฐ์ฒด๋ ๋๋ถ๋ถ ์ผ๋ฐ ์๋ฃํ๋ณด๋ค ํฌ๊ธฐ๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ค์ํ๋ค
์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด์ ์ง๋ ์๊ฐ์ ์ด์ผ๊ธฐ ํ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๋ํด์ ๋ค์ ํ ๋ฒ ์๊ธฐํด๋ณด์.
์ฐ๋ฆฌ๊ฐ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ๋ค๋ ๊ฒ์ ์ด๋ค ์๋ฏธ์ผ๊น?
๋ฐ๋ก Stack ์์ญ์ ๊ตฌ์กฐ์ฒด์ ํฌ๊ธฐ๋งํผ ๊ณต๊ฐ์ ํ ๋น๋ฐ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ฌ๋ฌ ๊ฐ์ ๊ตฌ์กฐ์ฒด๊ฐ ํ์ํ ์ํฉ์์ ๊ตฌ์กฐ์ฒด๋ง๋ค ๊ฐ๊ฐ ํ ๋น์ ๋ฐ์๋ฒ๋ฆฌ๋ฉด Stack ์์ญ์ ๊ฝ ์ฐจ๋ฒ๋ฆฌ๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
๊ทธ๋์ ๊ตฌ์กฐ์ฒด๋ ์์๋ก ์ฐ๋ฆฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ Heap ์์ญ์ ํ ๋น๋ฐ๊ณ ๋ค ์ฌ์ฉํ๋ฉด free()
ํจ์๋ก ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ์ํค๋๊ฒ ์ต์ ํ ๋ถ๋ถ์์ ์ข์ ์ ์๋ฅผ ๋ฐ์ ์ ์๋ค.
์ด์ ์ค์ ์ผ๋ก ๋ค์ด๊ฐ๋ณด์
๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๋ฅผ ์ ์ธํ๊ณ ๋ฉ๋ชจ๋ฆฌ ํ ๋นํ๊ธฐ
๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๋ฅผ ์์ฑํ ๋๋ ์ผ๋ฐ ํฌ์ธํฐ ๋ณ์๋ฅผ ์์ฑํ ๋์ ๋์ผํ๊ฒ *
์ฐธ์กฐ ์ฐ์ฐ์๋ฅผ ์์ฑ ์์ ๋ณ์๋ช
์์ ์์น์ํค๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ Heap ์์ญ์ ์ฐ๋ฆฌ๊ฐ ํ์ํ ๋งํผ, ๊ตฌ์กฐ์ฒด์ ํฌ๊ธฐ๋งํผ ์์ฑ์ ํ ๊ฒ์ด๋ malloc ์ผ๋ก ๊ตฌ์กฐ์ฒด ํฌ๊ธฐ๋งํผ size๋ฅผ ์ง์ ํด์ ์์ฑ๊ณผ ํ ๋น์ ์งํํ ์ ์๋ค.
struct ๊ตฌ์กฐ์ฒด_์ด๋ฆ *ํฌ์ธํฐ_์ด๋ฆ = malloc(sizeof(struct ๊ตฌ์กฐ์ฒด_์ด๋ฆ));
ํ์ดํ ์ฐ์ฐ
์์์ ์์ฑ๊ณผ ํ ๋น์ ํ์ผ๋ ์ค์ง์ ์ผ๋ก ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค.
๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์์ ๋ฐ์ดํฐ๋ฅผ ํ ๋นํ๊ธฐ ์ํด ํ์ดํ ์ฐ์ฐ์ ์ฌ์ฉํ๋ค.
ํ์ดํ ์ฐ์ฐ์ ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ ์์ ๋ณ์์, ์ฆ ๋ฉค๋ฒ ๋ณ์์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํ๋ค.
ํฌ์ธํฐ_์ด๋ฆ -> ๋ฉค๋ฒ๋ณ์_์ด๋ฆ = ๊ฐ
ํํ๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ง์ฝ ํ์ดํ ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ง ์์ ๊ฒฝ์ฐ์๋ ๊ดํธ์ ์ญ์ฐธ์กฐ๋ฅผ ์ด์ฉํด์๋ ํ ๋นํ ์ ์๋ค.
(*ํฌ์ธํฐ_์ด๋ฆ).๋ฉค๋ฒ๋ณ์ = ๊ฐ
์ด์ ์ค์ ์ฝ๋๋ฅผ ํ์ธํด๋ณด์.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int age;
char name[];
} Student;
int main() {
Student *pointer = malloc(sizeof(Student));
pointer -> age = 25;
strcpy(pointer -> name, "์ฅ์์ต");
printf("์ด๋ฆ: %s \n", pointer -> name);
printf("๋์ด: %d", pointer -> age);
free(pointer);
return 0;
}
malloc ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค๋ฉด ๋ง์ง๋ง์ free๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ์ํค๋ ๊ฒ๋ ์์ง ๋ง์
๋๊ธ