동적할당

기술노트
Admin (토론 | 기여)님의 2025년 4월 17일 (목) 15:51 판 (컴퓨터 과학 용어 정리 - 동적할당 추가)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

[C] 동적할당


          1. 동적할당이란?

> 프로그램 실행 중에 동적으로 메모리를 할당하는 것 > > 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)`
   - 할당된 메모리 해제


중요

할당한 메모리는 반드시 해제하자 (해제안하면 메모리 릭, 누수 발생)


c
#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]` : 다 사용하면 꼭 메모리 해제



          1. [참고 자료]