동적할당

정적 메모리 할당과 달리 상황에 따라 필요한 크기만큼의 메모리를 할당하는 것

⇒ heap 영역에 메모리 할당

포인터와 C언어 제공 라이브러리 함수를 활용한다

메모리할당 함수

메모리 해제 함수

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형 포인터로 리턴한다는 의미이다.