Jupitor's Blog

[c언어] 이중 해제의 예방 본문

IT/C programming language

[c언어] 이중 해제의 예방

Jupitor6245 2020. 5. 14. 22:29

c언어에서 malloc, realloc 등으로 메모리를 할당하고

free로 메모리를 반환할때,

이미 해제된 메모리를 또 한번 잘못 free로 반환하게 될 경우

자칫하다간 심각한 오류를 발생시킬 수 있다.

 

따라서 free로 해제시킨 포인터에 NULL을 할당하여 사고를 예방할 수 있다.

 

그렇다면 free 함수 자체가 해당 포인터가 가르키는 메모리를 해제 한 후 포인터에 NULL을

대입하면 되지않는가?? 라고 할 수 있는데, free의 프로토 타입을 한번 보자.

 

void free(void *ptr)

 

다들 알다시피 free 함수에 매개변수로는 포인터의 주소가 간접참조되므로 포인터의 주소 자체를

변경할 수는 없다.

 

그래서 위에서 말했다 시피 free 문을 쓰고 난 후 ptr = NULL 을 해주거나

이게 귀찮으면 간단한 함수 하나를 만들어 사용하는게 좋겠다.

 

 

<코드> 

 

<실행 결과>

- 그냥 free문을 사용했을 떄

 

- 새로 만든 free 문을 사용했을 때 ( 함수 매개변수 입력 형식이 free와 다르므로 주의 )

 

 

NULL로 포인터 주소를 바꾸면 free(ptr)해도 아무 이상이 생기지 않았다.