free 함수

void free(void *ptr); 동적으로 할당한 메모리 해제

입력 매개 변수 리스트

ptr 동적으로 할당한 메모리 주소

반환 값

없음

free 함수는 동적으로 할당한 메모리를 해제하는 함수입니다. 동적으로 할당한 메모리는 부분적으로 해제할 수 없습니다. 따라서 프로그램에서는 동적으로 할당한 메모리 주소를 기억해 두었다가 더 이상 사용하지 않을 때 free 함수로 해제합니다. 만약 동적으로 할당한 메모리의 크기를 변경하기 원하는 realloc 함수를 사용합니다.

사용 예

//C언어 표준 라이브러리 함수 가이드
//void free(void *ptr); 동적으로 할당한 메모리 해제
//정수형 변수의 주소를 포인터 변수로 사용 및 동적 메모리 할당하여 사용하는 코드
//정수형을 원소로 하는 배열을 포인터 변수로 사용 및 동적 메모리 할당하여 사용하는 코드

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

int main(void)
{
    {//정수형 변수의 주소를 포인터 변수로 사용 및 동적 메모리 할당하여 사용하는 코드
        int i;
        int *p1, *p2;
        p1 = &i;//i 변수의 주소를 p1 변수에 대입
        *p1 = 7;//p1이 가리키는 곳에 7 대입
        printf("i: %d *p1:%d\n",i ,*p1);//확인        
        p2 = (int *)malloc(sizeof(int));//int 크기의 메모리를 동적 할당
        *p2 = 7;//p2가 가리키는 곳에 7 대입
        printf("*p2: %d \n", *p2);//확인
        free(p2);//동적으로 할당한 메모리 해제
    }    
    {//정수형을 원소로 하는 배열을 포인터 변수로 사용 및 동적 메모리 할당하여 사용하는 코드
        int arr[10];
        int *base, *base2;
        int asize, i;
        base = arr;
        //base와 인덱스를 이용하여 값 설정
        for(i=0;i<10;i++)
        {
            base[i] = i+1;
        }
        //arr과 인덱스를 이용하여 값 확인
        for(i=0;i<10;i++)
        {
            printf("%d ", arr[i]);
        }
        printf("\n");        
        printf("동적으로 할당할 개수를 입력 : ");
        scanf_s("%d",&asize);
        base2 = (int *)malloc(sizeof(int)*asize);//int 형식 크기 * asize 만큼의 메모리 동적 할당        
        //base2와 인덱스를 이용하여 값 설정
        for(i=0;i<10;i++)
        {
            base2[i] = i+1;
        }
        //base2와 인덱스를 이용하여 값 확인
        for(i=0;i<10;i++)
        {
            printf("%d ", base2[i]);
        }
        free(base2);//동적으로 할당한 메모리 해제
        printf("\n");
    }
    return 0;
}

출력

i: 7 *p1: 7
*p2: 7
1 2 3 4 5 6 7 8 9 10
동적으로 할당할 개수를 입력 : 10(입력)
1 2 3 4 5 6 7 8 9 10