2학년 2학기/c언어
13-2장 malloc()과 free()
kkkkk1023
2024. 11. 19. 19:57
maclloc()
: 동적 메모리를 할당할 때 사용
int *pi; //stack 영역에서 할당
pi = (int *)malloc(sizeof(int)) //반환은 void* 타입으로
❓ 왜 malloc은 void*로 반환을 하는가?
사용자가 어떤 타입의 메모리를 할당하는지 모르기 때문에 메모리의 주소를 반환할 때 특정 타입에 한정해서 반환하지 않고, 범용적으로 사용할 수 있는 포인터 타입인 void*를 이용하는 것이다.
❓ 왜 malloc 반환 값을 int*로 타입 캐스팅을 하는가?
malloc이 범용적인 포인터 타입 void*를 반환하기 때문에 그 타입을 명시적으로 변경해주기 위해서 타입 캐스팅을 한다. 타입 캐스팅을 하면 가독성과 안정성을 높일 수 있다.
값 입력, 연산, printf, scanf
// 값 입력
*pi = 10
// 값 연산
*pi + 20
//printf
printf("%d", *pi
//scanf
scanf("%d", &(*pi)) //사실은 아래와 같이 변경할 수 있다.
scanf("%d" pi)
사용 예시
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char* pc;
pc = (char*)malloc(1 * sizeof(char));
if (pc == NULL) {
printf("메모리 할당 오류\n");
exit(1);
}
*pc = 'a';
printf("%c \n", *pc);
free(pc);
return 0;
}
malloc을 했을 때 NULL이 나오는 이유는 연결된 메모리 공간이 없어서 메모리를 할당 받지 못했기 때문이다.
free()
: 동적 메모리를 반환할 때 사용
동적 메모리 사용이 끝났다면 free(동적 메모리 주소를 담은 포인터 변수)를 사용해서 메모리 할당을 해제해야한다.