Xcode 6.4 (6E35b)에서 clang 정적 분석을 사용하고 잠재적 인 메모리 누수에 대해 거짓 경고를 표시합니다. 나는 문제의 메모리를 명시 적으로 해제하지만 다른 컴파일 유닛에서는 해제가 발생합니다. 다음은 내 MWE입니다.clang false positive 누출 경고를 표시하지 않으려 고 시도했습니다.
file2.c : 실제 해제를 수행합니다.
#include <stdlib.h>
void my_free(const void* p) {
free((void*) p);
}
file1.c : 메모리를 할당하고 명시 적으로 외부 함수를 통해 해제합니다.
#include <stdlib.h>
void my_free(const void* p);
int main(int argc, char* argv[]) {
void* data = malloc(1);
if(data) my_free(data);
return 0; /* <-- "Potential leak of memory pointed to by 'data'" */
}
나는 그것의 호출과 같은 컴파일 단위에 my_free()
을 정의
my_free()
를 호출해야합니다.
나는 FAQ and How to Deal with Common False Positives을 통해 읽었지만, 내 상황을 해결하지 못했습니다. 문제의 기억을 정말로 풀어주고있는 clang을 보장하기 위해 무엇을 할 수 있습니까?
는 경우 버전 정보는 관련 :
#ifdef __clang_analyzer__
#define my_free free
#endif
이것은을 만들 것입니다 : 그 문제를 해결하는
% clang --version
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
"my_free"가 "my_malloc"과 쌍을 이루기를 기대합니다. – Groo
@Groo : 좋은 지적입니다. 이 MWE는 제안에서 약간 오도 된 것일 수 있지만 할당 및 할당 해제가 일반적으로 쌍으로 이루어져야한다는 데 동의합니다. –