티스토리 뷰

C언어 이야기

[C언어] malloc(), free() 함수를 이용한 메모리 동적 할당 예제



 C언어의 메모리 할당 방식의 종류  


C언어에서의 메모리 할당 방식
크게 두 가지 방식으로 나뉩니다.

바로 정적인 방식동적인 방식입니다.

첫번째, 정적인 방식이란?
정적인 방식
프로그램이 실행되기 이전에 이미 변수의 저장공간을 할당하고
그 모듈이나 프로그램이 종료되면 변수가 해지되는 방식
입니다.

Ex) int a = 10 ;

두번째, 동적인 방식이란?
- 동적인 방식실행 중에 필요한 메모리를 할당하는 방식입니다.




>> 동적인 메모리 할당 방식에 대해 알아봅시다

그러면 동적인 메모리 할당 방식에 대해서 알아보겠습니다.
동적인 메모리 할당은 malloc()함수를 사용합니다.

malloc()함수는 stdlib.h파일에 정의되어 있습니다.

stdlib.h파일에 정의된 malloc()함수의 원형은 다음과 같습니다.

void * malloc ( size_t ) ;



함수 malloc()

인자로 메모리 할당의 크기를 지정하고 반환값으로 할당된 메모리의 주소를 반환합니다.
반환값의 유형은 void*입니다.


- malloc()함수 예제


/* malloc_ex1.c 정수형 int의 메모리 공간을 malloc()을 이용하여 동적으로 할당하는 예제*/ #include<stdio.h> #include<stdlib.h> int main(void){ int *pi ; pi =(int*) malloc(sizeof(int)) ; *pi = 3; printf("%d\n", *pi); return 0 ; }


위의 예제를 실행하면 아래와 같은 화면이 나옵니다.




>> 여기서 잠깐!!!

잠깐!!! 한 가지 조심해야 할 부분이 있습니다.

바로 동적할당을 해준 다음에는
반드시 free()함수를 통해 할당된 메모리를 해제해야 한다는 것
입니다.

왜 해제를 해줘야 하느냐면 이제 이 공간은 쓸 필요가 없기 때문입니다.
쓸 필요가 없으면 해제하고 다른 곳에 쓰는 것이 더 효율적이니까요.


malloc()에 의하여 동적으로 할당된 공간을 더 이상 필요가 없거나 프로그램을 종료하는 경우
아래의 free() 함수로 메모리를 해제합니다.

void free( void * )



- 최종 예제

/* 예제 malloc_ex1.c에서 해제되지 않은 메모리를 free()함수를 이용하여 해제*/
#include
#include

int main(void){
    int *pi ;

    pi =(int*) malloc(sizeof(int)) ;
    *pi = 3;

    printf("%d\n", *pi);

    free(pi);

    return 0 ;
}

 


글 잘 보셨나요?
 잘 보셨다면 아래에 손가락 모양을 꾹 눌러주세요 1초도 안걸려요^^
댓글