본문 바로가기

프로그래밍/C언어

[C언어] 동적메모리 할당의 해제

안녕하세요 ! 초보개발자 입니다. 

이 블로그는 개인 공부 정리용 블로그 입니다. 

혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.

그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.

그럼 시작하도록 하겠습니다.



동적 메모리 할당 해제


우리는 메모리를 동적으로 할당하는 함수가 malloc() 이라고 배웠습니다. 그런데 동적으로 메모리를 할당하고 사용한 뒤에는 반드시 할당한 메모리를 해제 해주어야 합니다. 해제 해주지 않는다면 메모리 누수가 발생할 것입니다. 할당 한 메모리를 해제하는 함수는 free() 함수를 사용 하는 것입니다. 사용하는 방법은 다음과 같습니다.


            int *p = malloc(sizeof(int)); // 4byte의 메모리 할당

free(p); // 4byte의 메모리할당 한것을 해제


위의 코드에서 할당 한 메모리를 해제 한 후에 헤제한 메모리에 다시 접근하면 어떻게 될까 ? 


int *p = malloc(sizeof(int));

free(p);

p[0] = 10;


위의 코드를 컴파일하면 에러가 나지 않는다. 하지만 이영역이 다른 용도로 할당 되어 사용될 수 있기 때문에 이런식으로 코드를 짜서는 안됩니다. 그래서 메모리를 해제한 직후에는 해당 메모리를 가리키던 포인터는 NULL로 초기화 하는 방법이 있습니다. 할당이 해제된 메모리를 가리키는 포인터를 '댕글링 포인터'라고 하며 위에서 설명한 것처럼 메모리를 해제한 후에 포인터를 NULL로 초기화하여야 합니다.


int *p = malloc(sizeof(int)); // 4byte의 메모리 할당

free(p); // 4byte의 메모리할당 한것을 해제

p = NULL; // 해제한 포인터를 NULL로 초기화

p[0]=10; //접근 불가


이상으로 동적메모리 할당의 해제에 대해 알아 보았습니다.