정적 메모리 할당과 달리 상황에 따라 필요한 크기만큼의 메모리를 할당하는 것
⇒ heap 영역에 메모리 할당
포인터와 C언어 제공 라이브러리 함수를 활용한다
malloc(), calloc(), realloc()malloc() : 사용자가 원하는 크기만큼 메모리 할당calloc() : 사용자가 원하는 크기만큼 메모리를 할당하고 0으로 초기화. 주로 배열/구조체 타입의 동적메모리 할당시 사용한다realloc() : 기존에 저장되어 있던 데이터는 유지하고 메모리의 크기만 변경free()int *arr;
arr = (int *)malloc(sizeof(int)*5);
if (arr==NULL) exit(1);
free(arr); // free()의 파라미터에 메모리를 반환할 변수 넣어줌
#include <stdio.h>
#include <stdlib.h>
int main() {
int *pi = NULL; // NULL pointer : 포인터 변수를 초기화하기 위한 용도
pi = (int *)malloc(sizeof(int)*1); // pi에 4byte만큼의 메모리 할당
if (pi==NULL) exit(1);
printf("%d", *pi); // 쓰레기값이 출력된다
free(pi); // 프로그램 종료 전 반드시 메모리 해제
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main() {
int *pi = NULL; // NULL pointer : 포인터 변수를 초기화하기 위한 용도
pi = (int *)calloc(sizeof(int)*1); // pi에 4byte만큼의 메모리 할당
if (pi==NULL) exit(1);
printf("%d", *pi); // 0이 출력된다 -> calloc함수는 메모리 할당과 동시에 0으로 초기화
free(pi); // 프로그램 종료 전 반드시 메모리 해제
return 0;
}
int *pi = NULL; // NULL pointer : 포인터 변수를 초기화하기 위한 용도
pi = (int *)malloc(sizeof(int)*1); // pi에 4byte만큼의 메모리 할당
: 앞에 (int *)는 리턴형이다. int형 포인터로 리턴한다는 의미이다.