C에서 NULL 포인터를 해제하는 것이 좋은 관행인가?
만약 포인터라면 자유롭게 해 주는 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);
만약
ptr
null 포인터로, 동작이 발생하지 않는다.
확인 안 함NULL
그것은 단지 읽을 더미 코드를 더 추가했을 뿐이고 따라서 나쁜 관행이다.
단, 항상 확인해야 한다.NULL
사용할 때의 포인터malloc
에는 & 그럴 경우NULL
뭔가 잘못되었다는 뜻이지, 아마 기억력이 없었겠지
굳이 확인하려고 하지 않는 것이 좋은 관행이다.NULL
전화하기 전에free
체크하는 것은 당신의 코드에 불필요한 잡동사니를 더하고,free(NULL)
안전이 보장된다.C99 표준의 섹션 7.20.3.2/2부터:
그
free
함수는 공간을 가리키는 원인이 된다.ptr
할당을 해제하는 것, 즉 추가 할당에 사용할 수 있도록 한다.만약ptr
null 포인터로, 동작이 발생하지 않는다.
댓글에서 언급했듯이, 일부 사람들은 때때로, 이 질문에 대해 체크가 아닌지를 궁금해 한다.NULL
불필요한 기능 호출을 하는 것보다 더 효율적이다.그러나 다음과 같다.
- 시기상조인 마이크로 최적화를 말한다.
- 상관없어.확인 중
NULL
첫 번째는 비관적인 것일 수도 있다.예를 들어 99%의 시간 동안 포인터가 제대로 표시되지 않는 경우NULL
그 다음엔 중복되는 것이 있을 것이다.NULL
99%의 시간을 확인하여 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
'programing' 카테고리의 다른 글
AJAX 호출을 위해 Vuex Store 데이터를 준비하는 적절한 방법 (0) | 2022.05.10 |
---|---|
왜 C연합이 필요한가? (0) | 2022.05.10 |
iOS 앱을 순수하게 C로 작성하는 방법 (0) | 2022.05.10 |
Vue.js 템플릿 루프 - 비동기식 공리 호출 (0) | 2022.05.10 |
Vue의 v-on 지시어에 여러 이벤트 바인딩 (0) | 2022.05.10 |