Development Tip

C에서 NULL 포인터를 해제하는 것이 좋은 습관입니까?

yourdevel 2020. 11. 16. 22:18
반응형

C에서 NULL 포인터를 해제하는 것이 좋은 습관입니까?


중복 가능성 :
ptr이 NULL 인 경우 free (ptr)가 메모리를 손상 시킵니까?

포인터가 malloc()ed 인 경우 해제하는 C 함수를 작성 중 입니다. 포인터는 NULL (오류가 발생하고 코드에 아무것도 할당 할 기회가없는 경우)이거나 malloc(). free(ptr);대신 사용 하는 것이 안전 if (ptr != NULL) free(ptr);합니까?

gcc를 사용해도 전혀 불평하지 않지만 -Wall -Wextra -ansi -pedantic좋은 습관입니까?


ISO-IEC 9899 의 C 표준 7.20.3.2/2 인용 :

void free(void *ptr);

경우 ptr널 포인터가 아무런 조치가 발생하지 않습니다.

을 확인하지 마십시오. NULL읽을 더미 코드 만 더 추가되므로 나쁜 습관입니다.


그러나 & co를 사용할 때는 항상NULL 포인터를 확인 해야합니다 malloc. 이 경우 NULL무언가 잘못되었다는 의미이며, 사용 가능한 메모리가 없을 가능성이 높습니다.


NULL전화하기 전에 확인하지 않는 것이 좋습니다 free. 검사는 코드에 불필요한 혼란을 추가하고 free(NULL)안전을 보장합니다. C99 표준의 섹션 7.20.3.2/2에서 :

free 함수는 ptr이 가리키는 공간을 할당 해제, 즉 추가 할당에 사용할 수 있도록합니다. ptr이 널 포인터이면 조치가 발생하지 않습니다.


무작위로 인터넷 검색을하면 http://linux.die.net/man/3/free 가 나타납니다.

ptr이 NULL이면 작업이 수행되지 않습니다.


제 생각에는 적어도 당신의 경우에는 아닙니다.

메모리를 할당 할 수 없다면 free를 부르기 전에 WAY를 확인해야합니다.

참고 URL : https://stackoverflow.com/questions/6084218/is-it-good-practice-to-free-a-null-pointer-in-c

반응형