2011-11-04 4 views
6

가능한 중복 삭제 :
Is there any reason to check for a NULL pointer before deleting?널 포인터를

나는 종종 코드에서 다음을 참조

: 내 이해에

if(pointer) 
    delete pointer; 

이 널을 삭제하는 것이 안전합니다 포인터, 그래서이 수표의 요점은 무엇입니까?

+2

..... 안전한가요? – slartibartfast

+3

기억해야 할 중요한 포인트는 일단 삭제되면 NULL로 설정됩니다. – vrrathod

+1

제 이해를 위해서는 이해가 정확하지만 모든 사람들이 그것을 공유하는 것은 아닙니다. 그러나 그 언어가 무엇을 말하는지 보자. – delnan

답변

9

delete은 포인터가 널 (NULL)인지 확인하므로 검사가 필요하지 않습니다.

후에 포인터가 NULL 으로 설정되는 것을 볼 수도 있습니다. 더 이상 너와 같은 메모리를 사용하거나 포인터를 두 번 삭제하지 못하도록 바보처럼 행동하지 마십시오. 오류가 발생합니다.

+0

"너는 더 이상 너의 것이 아닌 메모리를 사용하려고 바보 같은 짓을하지 않도록 너의 의견에"널 포인터를 역 참조하는 것조차 UB이다. 포인터가 다시 삭제 된 경우 유용합니다 (이미 언급 한 이중 삭제) –

1

지금은 안전하지만 언제나 그런 것은 아니 었습니다 .- 그래서 습관성이 있습니다. 또한 삭제할 다른 결과가 있습니다. 1) 전문화 된 메모리 관리자를 사용하고 신규 및 삭제 연산자를 무시하는 경우 자세한 내용은 Operator Delete을 확인해야 할 수도 있습니다.

+6

'[표창장을 필요로했다]'. 추가하기가 아주 쉽습니다. IIRC C는'free'가 영원히 'NULL'을 올바로 처리한다는 것을 보증합니다 (최소한 C89, ANSI C에서도 그렇듯이 놀라지 않을 것입니다). 그래서'delete NULL; '을 처리 할 수없는 쓸만한 C++ 구현이 있다는 것을 믿기 어렵습니다. – delnan

1

확인이 필요하지 않습니다. 것입니다 삭제

The documentation 상태가 일반적으로 오류 그렇지 않으면 (다른 그건 정말 볼 수 없습니다보다 취급이 있기 때문에 "ptr이 가리키는 메모리 블록을 할당 해제 (-null가 아닌 경우)"

0

대부분의 사람들은 이렇게 수표 발행 시점). 어떤 경우에는 실수로 포인터를 어딘가에서 변경하지 않고 메모리 누수를 일으키지 않고 무언가를 해제하고 있는지 확인합니다. free(NULL);은 모든 경우에 작동해야하며 오류가 발생하지 않도록해야합니다. 오류 처리가 포함되어 있지 않으면 if 문을 제거하고 무료로 처리 할 수 ​​있습니다.