프로그래밍 언어/C

C언어 21강) malloc함수로 메모리 사용하기

happy_life 2020. 11. 7. 22:14

포인터는 포인터 변수에 특정 변수의 메모리 주소를 저장하는 방식으로 메모리를 사용하였다.

이번에는 비슷하지만 조금 다른 방법을 소개하겠다. 바로 malloc 함수를 사용하는 것이다.

 

malloc 함수 사용

 

malloc 함수는 #include <stdlib.h> 해더 파일 안에 들어 있으므로 사용 전에 반드시 #include <stdlib.h>를 입력해줘야 한다.

 

1) 메모리 할당

 

사용법

포인터 = malloc(크기);

 

●메모리 할당 코드 예제

#include <stdio.h>
#include <stdlib.h>    // malloc, free 함수가 선언된 헤더 파일

int main()
{
    int num = 20;    // int형 변수 선언
    int* numPtr1;     // int형 포인터 선언

    numPtr1 = &num;  // num의 메모리 주소를 구하여 numPtr에 할당

    int* numPtr2;     // int형 포인터 선언

    numPtr2 = malloc(sizeof(int));    // int의 크기 4바이트만큼 동적 메모리 할당

    printf("%p\n", numPtr1);    // 00DCFDA0: 변수 num의 메모리 주소 출력
                                // 컴퓨터마다, 실행할 때마다 달라짐

    printf("%p\n", numPtr2);     // 013756E0: 새로 할당된 메모리의 주소 출력
                                // 컴퓨터마다, 실행할 때마다 달라짐

    free(numPtr2);    // 동적으로 할당한 메모리 해제하기


    return 0;
}

결괏값

●주의점

*포인터 변수로 하는 메모리 사용과는 달리, malloc 함수를 이용한 메모리 사용은 반드시 메모리 해제를 해주어야 한다.

 

2) 메모리에 값 저장

 

●사용법

 포인터 변수에서 하던 것과 비슷하니 , 코드 예제를 보면서 이해해보자.

 

●메모리에 값 저장 코드 예제

 

#include <stdio.h>
#include <stdlib.h>    // malloc, free 함수가 선언된 헤더 파일

int main()
{

    int* numPtr2;     // int형 포인터 선언

    numPtr2 = malloc(sizeof(int));    // int의 크기 4바이트만큼 동적 메모리 할당

    *numPtr2 = 15; //numPtr2의 주소를 역참조하고 거기에 15 값 넣기

    printf("\nnumPtr2 메모리에 들어있는 값: %d\n", *numPtr2);
  
    free(numPtr2);    // 동적으로 할당한 메모리 해제하기


    return 0;
}

결괏값