programing

C에서 NULL 포인터를 해제하는 것이 좋은 관행인가?

prostudy 2022. 5. 10. 22:23
반응형

C에서 NULL 포인터를 해제하는 것이 좋은 관행인가?

중복 가능:
ptr이 NULL 손상된 메모리인 경우 free(ptr)가 있는가?

만약 포인터라면 자유롭게 해 주는 C 함수를 쓰고 있다.malloc()가 아무 ED와 될 수 . 포인터는 NULL이거나 (오류가 발생하여 코드가 아무 것도 할당할 기회를 얻지 못한 경우) 로 할당될 수 있다.malloc()한가?사용해도 안전한가?free(ptr);대신에if (ptr != NULL) free(ptr);?

gcc와도 전혀 불평하지 않다.-Wall -Wextra -ansi -pedantic그러나 그것은 좋은 연습인가?

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

void free(void *ptr);

만약ptrnull 포인터로, 동작이 발생하지 않는다.

확인 안 함NULL그것은 단지 읽을 더미 코드를 더 추가했을 뿐이고 따라서 나쁜 관행이다.


단, 항상 확인해야 한다.NULL사용할 때의 포인터malloc에는 & 그럴 경우NULL뭔가 잘못되었다는 뜻이지, 아마 기억력이 없었겠지

굳이 확인하려고 하지 않는 것이 좋은 관행이다.NULL전화하기 전에free체크하는 것은 당신의 코드에 불필요한 잡동사니를 더하고,free(NULL)안전이 보장된다.C99 표준의 섹션 7.20.3.2/2부터:

free함수는 공간을 가리키는 원인이 된다.ptr할당을 해제하는 것, 즉 추가 할당에 사용할 수 있도록 한다.만약ptrnull 포인터로, 동작이 발생하지 않는다.

댓글에서 언급했듯이, 일부 사람들은 때때로, 이 질문에 대해 체크가 아닌지를 궁금해 한다.NULL불필요한 기능 호출을 하는 것보다 더 효율적이다.그러나 다음과 같다.

  • 시기상조인 마이크로 최적화를 말한다.
  • 상관없어.확인 중NULL첫 번째는 비관적인 것일 수도 있다.예를 들어 99%의 시간 동안 포인터가 제대로 표시되지 않는 경우NULL그 다음엔 중복되는 것이 있을 것이다.NULL99%의 시간을 확인하여 1%의 추가 기능 호출을 방지하십시오.

http://linux.die.net/man/3/free을 참조하십시오.

ptr이 NULL이면 조작이 수행되지 않는다.

내 생각에는, 아니, 적어도 네 경우에는 아니야.

메모리를 할당할 수 없다면, 무료 통화 전에 그 방법을 확인했어야 한다.

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

반응형