Skip to content

Latest commit

 

History

History
91 lines (58 loc) · 2 KB

[C] 동적할당.md

File metadata and controls

91 lines (58 loc) · 2 KB

[C] 동적할당


동적할당이란?

프로그램 실행 중에 동적으로 메모리를 할당하는 것

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)
      • 할당된 메모리 해제

중요

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


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


[참고 자료]