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(동적 메모리 주소를 담은 포인터 변수)를 사용해서 메모리 할당을 해제해야한다.
'2학년 2학기 > c언어' 카테고리의 다른 글
13-4장 구조체 동적 생성 (0) | 2024.11.25 |
---|---|
13-3장 동적 할당 영역을 배열처럼 쓰기 (0) | 2024.11.19 |
13-1장 동적 메모리 할당란? (0) | 2024.11.19 |
12-8장 파일 포인터 (0) | 2024.11.19 |
12-7장 이진 파일의 생성과 fread, fwrite (0) | 2024.11.18 |