본문 바로가기
Language/C언어

C044_malloc 사용하기

by OdOp 관리자 2024. 1. 2.
SMALL

malloc을 설명하기 전에 정적 변수와 동적 변수에 대해 먼저 알아야 할것 같습니다. 

 

정적 변수란?

프로그램 실행시 할당되고, 프로그램 종료시 파괴되는 변수입니다. 

이는 컴파일을 진행할 때, 컴파일 시간(Compile Time)에 메모리를 할당합니다. 

 

동적 변수란?

저희가 직접 메모리 즉, 저장공간을 할당해준 변수입니다. 사용자가 직접 프로그램이 종료되기 전에 메모리를 해제해 주어야 합니다. 

코드가 시작되고 실행 시간(Run Time)에 메모리를 할당합니다. 

 

malloc 사용하기

void	*malloc(size_t size);
  • 헤더 파일: stdlib.h
  • size :할당할 메모리 크기
  • 반환값 : 성공 시, 원하는 크기만큼 할당된 void 포인터
                 실패시, NULL
#include <stdlib.h>

int main(void)
{
    char *test;

    test = malloc(sizeof(char) * 6);  //6 size
    if (test == NULL)
        return (0);
    free(test);
    return (0);
}

 

신기한 부분이 조금 있는 것 같습니다. 

하나하나 살펴보겠습니다.

 

malloc 실패

test가 NULL이 될 가능성이 있습니다. 즉, malloc이 실패할 경우입니다. 

왜 실패하는 것일까요???  메모리의 부족으로 실패할 가능성이 있습니다. 

그 경우에 그냥 프로그램이 종료되게 만들었습니다. 

if (test == NULL)
    return (0);

 

메모리 해제하기

앞에서 설명 드렸다시피 동적할당은 사용자가 직접 해제를 해주어야 합니다. 

그렇지 않을 경우 메모리 누수가 발생이 됩니다. 

 

메모리 누수란?

메모리가 세는 현상을 말합니다. 

 

메모리 누수가 일어나게 된다면 메모리가 쌓이게 되고 그에 따라 프로그램이 무거워집니다. 그러면 컴퓨터가 느려지겠죠.

이러한 현상을 방지하고자 저희가 할당한 메모리를 해제 시켜주어야 합니다. 

이를 free함수가 해줍니다. 

free(test);

 

이렇게 간단하게 malloc에 대해 알아보았습니다. 궁금증이 많이 해소되셨으면 좋을 것 같습니다. 

LIST

'Language > C언어' 카테고리의 다른 글

C046_exit 함수 사용하기  (0) 2024.01.04
C045_perror함수 사용하기  (0) 2024.01.03
C043_가변인자 사용하기  (0) 2023.12.30
C042_Makefile 만들기  (2) 2023.12.29
C041_read함수 사용하기  (0) 2023.12.28