(2) malloc()๊ณผ free()
• ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ ์ฐจ์ ๋ํด ์์๋ณด์.
• ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋์๊ด์์ ์ฑ ์ ๋น๋ฆฌ๋ ์ ์ฐจ์ ๋น์ทํ๋ค. ๋์๊ด์์๋ ํ์ํ ์ฑ ์ ์ ์ฒญํ๊ณ ์ฑ ์ด ์ค๋น๋๋ฉด ๋ฐ์์ค๋ ๋จ๊ณ๊ฐ ํ์ํ๋ค. ์ฑ ์ ์ฌ์ฉ์ด ๋๋๋ฉด ์ฑ ์ ๋ค์ ๋์๊ด์ผ๋ก ๋ฐ๋ฉํ๋ ๋จ๊ณ๊ฐ ํ์ํ๋ค.
• ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
• ๋จผ์ ์ผ๋ง๋ ํ ๋น์ ๋ฐ์ ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ฅผ ํธ์ถํ์ฌ ์ด์ ์ฒด์ ์๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญํ๋ ๋จ๊ณ๊ฐ ํ์ํ๋ค. ๋ง์ฝ ์ถฉ๋ถํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์กด์ฌํ๋ฉด ๊ทธ ์์ฒญ์ ์น์ธ๋๊ณ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๋ค. ํ๋ก๊ทธ๋จ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค. ์ฌ์ฉ์ด ๋๋๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค์ ์ด์์ฒด์ ์๊ฒ ๋ฐ๋ฉํ๋ ๋จ๊ณ๊ฐ ํ์ํ๋ค. ๋ง์ฝ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐ๋ฉํ์ง ์์ผ๋ฉด ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๋ฐ๋์ ๋์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ช ์์ ์ผ๋ก ๋ฐ๋ฉ์ ํด์ฃผ์ด์ผ ํ๋ค.
โ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
• ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํจ์์ธ malloc()์ ํค๋ ํ์ผ <stdlib.h>์ ์ํ์ด ์ ์๋์ด ์์ผ๋ฉฐ ๋ฐ์ดํธ ๋จ์๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค.
• malloc() ํจ์๋ ์์ฒญ๋ ํฌ๊ธฐ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐพ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ๋ฐํํ๋ค. ๋จ์๋ ๋ฐ์ดํธ์ด๋ค.
• ๋ฐ๋ผ์ malloc(100)์ด๋ผ๊ณ ํ๋ฉด 100๋ฐ์ดํธ์ ๊ณต๊ฐ์ ์์ฒญํ๋ ๊ฒ์ด๋ค.
• ๋ง์ฝ ์์ฒญํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ ์ ์๋ ๊ฒฝ์ฐ์๋ NULL ๊ฐ์ ๋ฐํํ๋ค.
• ์ฌ๊ธฐ์ ๋ฐํํ๋ ๊ฒ์ void๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ด๋ค. void ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ด๋ค ์๋ฃํ์ผ๋ก ์ฌ์ฉํ ์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. void ํฌ์ธํฐ๋ ๋ค๋ฅธ ์๋ฃํ์ ํฌ์ธํฐ๋ก ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ํ๋ก๊ทธ๋๋จธ๋ ์์ ์ด ์ฌ์ฉํ๊ณ ์ ํ๋ ์๋ฃํ์ ํฌ์ธํฐ๋ก ํ๋ณํํ์ฌ ์ฌ์ฉํด์ผ ํ๋ค.
โก ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
• ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ด๋ฆ์ด ์๋ค. ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ค์ง ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
• ๋ฐํ๋ ํฌ์ธํฐ๋ฅผ ํตํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ ์ฝ์ ์ ์๋ค.
• *pi = 'a'; ๋ฌธ์ฅ์ ์ํํ๋ฉด ๋์ ์ผ๋ก ํ ๋น๋ ๊ณต๊ฐ์ ๋ฌธ์ 'a'๊ฐ ์ ์ฅ๋๋ค.
*p = 'a';
โข ๋์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ๋ฉ
• free()๋ ๋์ ์ผ๋ก ํ ๋น๋์๋ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ์์คํ ์ ๋ฐ๋ฉํ๋ค.
• ๋ค์๊ณผ ๊ฐ์ ํจ์ ์ํ์ ๊ฐ์ง๋ฉฐ ์ฌ๊ธฐ์ ptr์ malloc()์ด๋ calloc()์ ์ด์ฉํ์ฌ ๋์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ด๋ค,
• ์ปดํจํฐ ์์คํ ์์ ๋์ ์ผ๋ก ํ ๋น ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๋ ์ ํ๋์ด ์๋ค.
• ๋ฐ๋ผ์ ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ์ด ๋๋ฌ์ ๊ฒฝ์ฐ์๋ ๋ฐ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ ์ ์๋๋ก ๋ฐ๋ฉํ์ฌ์ผ ํ๋ค.
• free()๋ฅผ ํธ์ถํ ๋๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ์ธ์๋ก ํ์ฌ ํธ์ถํ์ฌ์ผ ํ๋ค.
• ๋ฐ๋ผ์ malloc()์ด ๋ฐํํ ํฌ์ธํฐ๋ ์ ๋๋ก ์์ด๋ฒ๋ฆฌ๋ฉด ์ ๋๋ค.
์์ #1
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char *pc;
pc = (char *)malloc(1*sizeof(char));
if (pc == NULL) {
printf("๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ค๋ฅ\n");
exit(1);
}
*pc = 'a';
printf("%c \n", *pc);
free(pc);
return 0;
}
์์ #2
• 5๊ฐ์ ์ ์๋ฅผ ์ ์ฅํ ์ ์๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋ฐ๊ณ ์ฌ๊ธฐ์ 1, 2, 3, 4, 5๊น์ง์ ์ ์๋ฅผ ์ ์ฅํด๋ณด์.
#include <stdio.h>
#include <stdlib.h>
main(void) {
int *pi;
pi = (int *)malloc(5 * sizeof(int));
if (pi == NULL) {
printf("๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ค๋ฅ\n");
exit(1);
}
*pi = 1; // pi[0] = 1;
*(pi + 1) = 2; // pi[1] = 2;
*(pi + 2) = 3; // pi[2] = 3;
*(pi + 3) = 4; // pi[3] = 4;
*(pi + 4) = 5; // pi[4] = 5;
free(pi);
return 0;
}
ํ๋ก๊ทธ๋จ ์ค๋ช
์ฌ๊ธฐ์ ํฌ์ธํฐ pi๋ 5๊ฐ์ ์ ์ ์ค์์ ์ฒซ ๋ฒ์จฐ ์ ์๋ง์ ๊ฐ๋ฆฌํจ๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ค๋ฅธ ์ ์๋ค์ ์ด๋ป๊ฒ ์ ๊ทผํ์ฌ์ผ ํ๋๊ฐ? ์ฌ์ค ์ด๊ฒ์ ์ ์ ํ์ ์ 1์ฐจ์ ๋ฐฐ์ด์ด๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ๋ฐ๋ผ์ ํฌ์ธํฐ ๋ง์ ์ ์ด์ฉํ์ฌ ์ ๊ทผํ ์๋ ์๊ณ ์๋๋ฉด ๋ฐฐ์ด ํ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผํ์ฌ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ์ฒซ ๋ฒ์จฐ ๋ฐฉ๋ฒ์ pi๋ฅผ ๋ฐฐ์ด์ ์ด๋ฆ์ฒ๋ผ ์๊ฐํ์ฌ pi[1]์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํ๋ ๊ฒ์ด๋ค. ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ pi์ ์ ์๋ฅผ ๋ํ์ฌ ๋ค์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์๋ค. ์ด๋ค ๋ฐฉ๋ฒ์ด๋์ง ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ ๋์ผํ๋ค.
• ๋์ ๋ฉ๋ชจ๋ฆฌ์ 1, 2, 3, 4, 5๋ฅผ ์ ์ฅํ๋ ๋ฌธ์ฅ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๋ณต ๊ตฌ๋ฌธ์ผ๋ก ์์ฑํ ์ ์๋ค.
int i;
for(i = 0; i < 5; i++) {
pi[i] = i + 1;
}
• ์์ ์ฝ๋๋ฅผ ์์ธํ ๊ด์ฐฐํด๋ณด๋ฉด ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋์ ๋ฐฐ์ด๋ก ๊ฐ์ฃผํ ์ ์์์ ์ ์ ์๋ค. ๋ฐฐ์ด๊ณผ ๋์ผํ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ฌ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
'1ํ๋ (2023) > C ์ธ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C] Study : ์์๊ณผ ์ฐ์ฐ์ - (1) ์์๊ณผ ์ฐ์ฐ์์ ๊ฐ๋ (0) | 2023.08.21 |
---|---|
[C] Study: ๋์ ๋ฉ๋ชจ๋ฆฌ - (3) ๊ตฌ์กฐ์ฒด์ ๋์ ์์ฑ์ ํด๋ณด์ (0) | 2023.08.19 |
[C] Study: ๋์ ๋ฉ๋ชจ๋ฆฌ - (1) ๋์ ํ ๋น ๋ฉ๋ชจ๋ฆฌ๋? (0) | 2023.08.19 |
[C] Study: ๋ณ์์ ์๋ฃํ - (5) ๋ฌธ์ํ (0) | 2023.08.18 |
[C] Study: ๋ณ์์ ์๋ฃํ - (4) ๋ถ๋์์์ ํ (0) | 2023.08.17 |