1. ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด๋?
- ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด๋ผ๋ ์๋ฏธ๋ ํ๋ก๊ทธ๋จ ์คํ ๋์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
- ์ด ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํ๊ธฐ ์ํด์๋ malloc()์ด๋ผ๋ ํจ์๋ฅผ ์ด์ฉํด์ ์ํํ๋ค.
- ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ํํ ๋๋ง๋ค ํ ๋น๋๋ ํฌ์ธํฐ์ ์ฃผ์๋ ๋ณ์น์ ์ด๋ค.
2. ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
- ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ํด ์๊ธฐํ๊ธฐ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๋ํด์ ํ๋ฒ ์ฝ๊ณ ์ค๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค. ( ์ค๋ช ๋งํฌ ๊ฑธ์ )
- ์ฌ๊ธฐ์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํด๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ์์ญ์ด๋ค.
3. ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํ๋ ๋ฒ
- ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ๋ฒ์ malloc ํจ์๋ฅผ ์จ์ ํ ๋นํ ์ ์๋๋ฐ, ๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ฐ์ ์ํฉ์ ๋ง๊ธฐ ์ํด free ํจ์์ ์ง์ ์ด๋ค ์ฐ์ด๊ณค ํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋์๋ ํ๋ก๊ทธ๋จ์ด ๊ฐ์๊ธฐ ์ข ๋ฃ๋๋ ์ฃผ๋ ์์ธ์ด๊ธฐ๋ ํ๋ค๋๊น ์กฐ์ฌํด์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *a = (int*)malloc(sizeof(int));
printf("%d\n", a);
free(a);
a = (int*)malloc(sizeof(int));
printf("%d\n", a);
free(a);
return 0;
}
/// ์ถ๋ ฅ
1054894208
1054894208
์ฒซ๋ฒ์งธ free ํจ์์์ ์ฑ๊ณต์ ์ผ๋ก ๋น์์ก๊ธฐ ๋๋ฌธ์ ์ฌ๋งํด์ ๋๋ฒ์งธ malloc์์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ค.
///
4. ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์ฉ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char *a = (char*)malloc(100);
memset(a,'A',100);
for (int i = 0; i < 100; i++) {
printf("%c",a[i]);
}
return 0;
}
/// ์ถ๋ ฅ
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%
memset(๋ณ์, ๋ค์ด๊ฐ ๊ฐ, ๋ค์ด๊ฐ๊ฐ์ ํฌ๊ธฐ) ์ ์ด์ฉํด ํ ๋นํ ๊ฒ์ ํ์ธํ๋ค.
///
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int **p = (int**)malloc(sizeof(int*) * 3);
for ( int i =0; i<3; i ++) {
*(p+i) = (int*)malloc(sizeof(int) *3);
} // ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ฝ๋
for ( int i = 0; i < 3; i++) {
for (int j =0; j < 3; j++) {
*(*(p+i)+j) = i*3 + j;
}
} // ๊ฐ ํ ๋น ์ฝ๋
for (int i =0; i < 3; i++){
for (int j = 0; j < 3; j++){
printf("%d",*(*(p+i)+j));
}
printf("\n");
} // ์ถ๋ ฅ ํ์ธ ์ฝ๋
return 0;
}
///์ถ๋ ฅ
012
345
678
///
์ด์ฒ๋ผ ๋ฏธ๋ฆฌ int a[][] ์ด๋ฐ์์ผ๋ก ๋จผ์ ํ ๋นํ๊ณ ์์ํ์ง ์์๋ 2์ฐจ์ ๋ฐฐ์ด์ ๋์ ์ผ๋ก ๋ง๋ค ์ ์๋ค.
์ด๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
์ฅ๊ธฐ๊ฐ ์คํ๋๋ ํ๋ก๊ทธ๋จ์์๋ free ํจ์๋ฅผ ๊ผญ ์ฐ๋๋ก ํด์ผํ๋ค.