C 언어 기초
C 언어에서 free(p); 바로 다음에 p = NULL;이라고 쓰는 것이 권장되는 이유로 가장 적절한 것은?
- ANULL을 대입하지 않으면 해제한 영역이 다시 사용할 수 있는 상태가 되지 않아, 메모리 누수가 되기 때문에
- Bp는 해제한 영역을 가리킨 채 남으므로, 이중 해제나 해제 후 사용을 막고 찾기 쉽게 하기 위해
- Cfree는 p를 자동으로 NULL로 만들지만, 만일을 위해 같은 값을 한 번 더 써서 확인하기 위해
정답과 해설 보기
정답: B. p는 해제한 영역을 가리킨 채 남으므로, 이중 해제나 해제 후 사용을 막고 찾기 쉽게 하기 위해
free(p)는 p가 가리키던 영역을 해제하지만, 변수 p의 값(주소)은 그대로 남습니다. 그대로 *p를 읽고 쓰면 해제 후 사용, 다시 free(p)를 호출하면 이중 해제가 되며, 둘 다 미정의 동작으로 힙의 관리 정보를 망가뜨려 떨어진 곳에서 이상이 일어나기도 합니다. p에 NULL을 넣어 두면 free(NULL)은 아무것도 하지 않는다고 정해져 있으므로 이중 해제의 해가 없고, 사용하기 전의 NULL 확인으로 실수도 알아차릴 수 있습니다. 다만 같은 영역을 가리키는 다른 포인터 변수에는 따로 주의가 필요합니다.