NULL
after에 대한 포인터를 설정하는 free
것은 특허 적으로 허위 전제에 대한 "좋은 프로그래밍"규칙으로 대중화되는 모호한 관행입니다. 그것은 "올바른 소리"범주에 속하는 가짜 진실 중 하나이지만 실제로는 아무 것도 유용하지 않습니다 (때로는 부정적인 결과를 초래합니다).
주장에 따르면, 포인터를 NULL
after로 설정 free
하면 동일한 포인터 값이 free
두 번 이상 전달 될 때 두려운 "더블 프리"문제를 방지 할 수 있습니다. 그러나 실제로는 10 개 중 9 개의 경우 에 동일한 포인터 값을 가진 다른 포인터 객체가에 대한 인수로 사용될 때 실제 "double free"문제가 발생합니다 free
. 말할 필요도없이, NULL
after에 대한 포인터를 설정하면 free
이러한 경우 문제를 방지 할 수있는 것은 없습니다.
물론에 대한 포인터와 동일한 포인터 객체를 사용할 때 "double free"문제가 발생할 수 free
있습니다. 그러나 실제로는 이와 같은 상황에서는 일반적으로 코드의 일반적인 논리적 구조에 문제가있는 것이지 우연히 "더블 프리"가 아닙니다. 이러한 경우 문제를 처리하는 올바른 방법은 동일한 포인터가 free
두 번 이상 전달 될 때 상황을 피하기 위해 코드 구조를 검토하고 다시 생각하는 것입니다. 이러한 경우 포인터를 설정하고 NULL
문제를 "고정"한 것으로 간주하는 것은 카펫 아래에서 문제를 해결하려는 시도에 지나지 않습니다. 코드 구조에 문제가 있으면 항상 다른 방법을 찾을 수 있기 때문에 일반적인 경우에는 효과가 없습니다.
마지막으로, 코드가 포인터 값에 의존 NULL
하지 않도록 특별히 설계된 NULL
경우 포인터 값을 NULL
after 로 설정하는 것이 free
좋습니다. 그러나 일반적인 "모범 사례"규칙 ( "항상 포인터를 " NULL
뒤에 표시 free
"에서와 같이)은 잘 알려져 있고 쓸모없는 가짜이며, 순전히 종교적이고 부두적인 이유로 일부가 뒤 따릅니다.
ptr == NULL
무언가를하기 전에 점검 할 수 있으면 항상 유용 합니다. free'd 포인터를 무효화하지 않으면ptr != NULL
여전히 사용할 수없는 포인터를 얻습니다 .