본문 바로가기

C언어/C언어 문법

[C언어] 동적할당 (stdlib.h, malloc, free)

728x90
반응형

stdlib.h

 

malloc 함수와 free 함수는 stdlib.h 헤더 파일에 포함되어 있다.

 

따라서 malloc 함수와 free 함수를 사용하기 위해서는 stdlib.h 헤더 파일 사용을 선언해 주어야 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 
 

 

동적 할당

 

malloc 함수를 사용하면 해당 주소에 원하는 만큼의 메모리를 할당해 줄 수 있다.

 

예를 들어 int 형 포인터 변수인 ptr을 선언하게 되면 ptr에 4바이트의 메모리가 자동으로 할당되는데

이 메모리는 프로그램이 종료될 때까지 유지된다.

 

 

 

그러나 이러한 메모리가 많으면 메모리 부족 현상이 발생하므로 이를 방지하기 위해 메모리를 동적으로 할당할 수 있다.

 

동적으로 할당한 메모리는 free 함수로 해제할 수 있기 때문이다.

 

 

 

 

 

 

 

 

 

 

 

 

malloc

 

malloc 함수는 반환값으로 void 포인터를 반환하며 아규먼트로 할당해 줄 메모리의 크기를 요구한다.

 

또한 malloc 함수는 void 포인터를 반환하기 때문에 항상 자료형에 맞춰서 강제형 변환을 해주어야 한다.

 

따라서 int 형 포인터 변수 ptr에 8바이트의 메모리를 할당해 주는 코드는 다음과 같이 작성할 수 있다.

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *ptr = (int*)malloc(8);
    return 0;
}
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

포인터와 배열

 

포인터와 동적할당을 사용하여 배열을 선언할 수도 있다.

 

예를 들어 int 형 변수 ptr 에 8바이트를 할당해 주었다면 4바이트 int 형 변수가 2개 들어갈 수 있을 것이다.

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *ptr = (int*)malloc(sizeof(int)*2);
    ptr[1] = 10;
    printf("%d", ptr[1]);
    return 0;
}
 
 

 

 

따라서 위 코드처럼 사용하는 것이 가능하다.

위 코드는 크기가 2인 int 형 배열을 선언한 것과 같다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

free

 

malloc 로 메모리를 할당해 준 후에 해당 변수의 사용이 끝났으면 free 함수로 메모리 할당을 해제하여

메모리 누수를 방지해야 하기 때문이다.

 

free 함수는 아규먼트로 메모리 할당을 해제할 포인터 변수를 요구한다.

 

따라서 int 형 포인터 변수 ptr에 메모리를 할당해 준 후에 다시 해제하는 코드는 다음과 같이 작성할 수 있다.

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *ptr = (int*)malloc(8);
    free(ptr);
    return 0;
}
 

 

 

 

 

free 함수로 할당을 해제한 이후에는 다시 사용이 불가능하다.

 

따라서 아래 코드를 실행시켜 보면 10이 출력되지 않는 것을 확인할 수 있다.

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int* ptr = (int*)malloc(8);
    ptr[1] = 10;
    free(ptr);
    printf("%d", ptr[1]);
    return 0;
}
 

 

 

 

 

 

 

 

 

 

 

728x90
반응형