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스크린샷 2017-05-06 오후 1.59.43

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

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

스크린샷 2017-05-06 오후 2.00.08스크린샷 2017-05-06 오후 2.00.21

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

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

답글 남기기

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

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