82 – 동적 메모리 할당과 해제 함수

프로그램 실행 중에 메모리를 할당하는 것을 동적 메모리 할당이라고 하고, 이러한 일을 하는 함수는 malloc과 calloc이 있다. 쓰이는 데 있어서 차이가 있다.

  • 함수이름 | 기능
  • malloc |메모리를 동적으로 할당한다.
  • calloc | 메모리를 동적으로 할당하고 0으로 초기화한다.
  • free | 할당된 메모리를 해제한다.

함수에서 메모리를 동적으로 할당할 때, 할당되는 메모리의 형태에 대해서는 어떻게 처리를 할 까 궁금해 할지도 모른다. 동적으로 할당하는 함수에서의 반환 형태는 (void *)이다.

void *malloc(size_t size);

와 같은 기본형을 가지고 있으며, (void *)형으로 반환을 하면 특정 데이터형에 국한하지 않고 다른 형으로 동적으로 반환할 수 있기 때문이다. int형으로 반환받고 싶다면

int *ptr = (int *)malloc(SIZE);

와 같이 작성을 하면 된다. 앞에서 봤던 형 변환을 이용하면 되는 것이다.

이제부턴 예시를 보고 이해를 하면 된다. 메모리를 동적으로 할당해서 사람에 대한 이름과 나이 정보를 저장하고 이를 연결 리스트로 관리하는 예제를 만들었다.

스크린샷 2017-05-06 오후 1.59.30

이름과 나이에 대해 구조체로 만들고, 그 구조체를 연결하여 이용할 연결 리스트 형태로 만들었으며, 동적 할당 또한 구조체 자체를 그대로 할당하여 진행하였다. 두 번째 사람을 입력하기 위해서도 기존의 구조체를 동적 할당한 다음에 앞에서 할당한 사람에게 다음 사람으로 인식하도록 포인터를 따라 만들어 연결 리스트로 이었다. 앞에 예시들을 쭉 따라왔다면 어렵지 않게 볼 수 있는 예제로 했다. 이렇게 동적 메모리 할당에는 특정 형태의 형을 구분하지 않고 이용할 수 있다.

calloc의 경우에는 할당 영역을 전부 0으로 초기화한다. 그렇기 때문에 주로 숫자 형태의 할당에 주로 이용하게 된다. 사용법은 malloc과 같다.

마지막으로 free에 대해 알아보는데, free를 하기 위해서는 동적 메모리를 카리키는 포인터를 함수에 넣어주면 된다. 앞에 malloc에 이용했던 예시를 free로 할당 해제한다면 다음과 같이 작업하면 된다.

ptr = (struct student *)malloc(sizeof(struct student));
free(ptr);

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.