[C언어] 동적 메모리 할당(malloc, free) 이해하기

업데이트:

동적 메모리 할당(malloc, free)

참고 링크

malloc는 인자로 전달된 정수 값에 해당하는 바이트 크기의 메모리 공간을 힙 영역에 할당하고, 이 메모리 공간의 주소값을 반환함(할당된 메모리 공간의 첫번째 바이트를 가리킴). malloc 함수는 주소값을 반환 하므로 그 주소값을 이용해 힙에 접근해야 합니다. 따라서 포인터를 이용해서 메모리에 공간에 접근해야합니다. malloc 함수의 반환형은 void형 포인터 입니다. 포인터에 대한 설명은 아래 링크를 참고해주세요.

링크: 포인터 이해하기

void * ptr = malloc(sizeof(int));
*ptr = 20; //ptr이 void형 포인터이므로 컴파일 에러

malloc함수의 반환형은 void형이므로, 반환값을 변형시키지 않으면 메모리 공간에 접근이 불가능하다. 위의 예처럼 20이라는 값은 int형인데 포인터변수 ptr이 가리키는 변수에 20을 할당할 수가 없죠. ptr이 가리키는 변수에 20을 저장하려면 ptr이 가리키는 변수는 int형 이어야 합니다. 하지만 위의 예에서 ptr이 가리키는 변수는 void형이죠. 따라서 20을 할당할 수 없습니다. 따라서 위의 예에서 포인터변수 ptr이 가리키는 변수에 20을 할당하려면 아래와 같이 프로그래밍해야합니다.

int * ptr = (int *)malloc(sizeof(int));
*ptr = 20;

끝으로 할당된 메모리를 해제하려면 free함수를 사용합니다.

free(ptr);