이론적으로 나는 말할 수 있습니다
free(ptr);
free(ptr);
이미 해제 된 메모리를 해제하기 때문에 메모리 손상입니다.
하지만 만약
free(ptr);
ptr=NULL;
free(ptr);
OS가 정의되지 않은 방식으로 동작하기 때문에 무슨 일이 일어나고 있는지에 대한 실제 이론적 분석을 얻을 수 없습니다. 내가 무엇을하든,이 메모리 손상이 아닌가?
NULL 포인터를 해제하는 것이 유효합니까?
delete NULL
C ++에서는 유효하지 않습니다. delete는 구체적인 유형의 null 포인터 값에 적용될 수 있지만 NULL
. delete (int*) NULL
합법적이지만 delete NULL
.
ptr
메모리를 가리키고 호출하지 않으면 free
메모리가 누수됩니다. 로 설정 NULL
하면 메모리에 대한 핸들이 손실되고 누출됩니다. ptr
일NULL
이 발생하면 호출 free
은 작동하지 않습니다.
free(ptr)
함께 ptr = NULL
. 아무도 그런 말을하지 않았습니다.