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