C언어

03. C언어_동적 메모리 할당(1차원 배열)

만수르코딩방 2024. 5. 15. 16:44

동적 메모리 할당이란?

-  프로그램 수행중에 필요한 크기의 메모리를 할당받아 사용하는 것을 동적 메모리 할당이라고 한다.

- malloc() 함수로 메모리를 할당받고, 사용이 끝난 메모리는 free()함수로 해제한다.

- 동적 할당 메모리는 RAM 내의 heap영역에 할당된다.

- 동적 할당 메모리는 이름이 없고 메모리의 주소만 가진다.

- 동적할당 메모리는 할당시 부터 해제시까지 전체 프로그램에서 유효하며, 해제를 따로 하지 않았을 떄에는 main 함수가 끝날때 해제된다.

- 장점 ) 프로그램의 사용중에 프로그래머가 원하는 만큼 데이터를 확보/제거하며 유동적으로 데이터를 관리할  있다.

 

malloc, free 예시

- malloc함수는 할당하고자하는 메모리의 크기를 입력받아 메모리를 할당한다. 할당에 성공 시 할당된 기억공간의 시작 주소를 반환하고, 실패 시 0번지 NULL을 반환한다.

- free함수에서는 내가 해제하고 싶은 기억공간의 주소를 받는다

 

변수 1개의 동적 메모리 할당 

#include<stdio.h>//printf, scanf 함수 등 가져와
#include<stdlib.h>//동적메모리 할당 함수 등 가져와
int main(){
    double *dp; //나는 double 자료공간을 가리키는 포인터변수야 동적메모리를 가리키는 포인터 변수는 전역변수로 선언되어 stack에 할당
    dp = (double*)malloc(sizeof(double)); //동적 메모리할당 함수 선언부
    if(dp!=NULL){
        *dp = 4.5; //동적메모리 할당한 기억공간에 4.5저장
        printf("*dp = %.2lf\n ", *dp);//동적메모리 할당한 기억공간에 실수값을 입력받음
        scanf("%lf", dp); //동적메모리 할당한 기억공간에 실수값을 입력받음
        printf("*dp = %.2lf\n", *dp);
        free(dp); //동적메모리 할당한 기억공간을 반납하여 미예약 영역으로 되돌림
        dp = NULL;
    }
}