(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 |