3

Xcode 6.4(6E35b)でclang静的解析を使用している可能性があります。私は問題のメモリを明示的に解放しますが、解放は別のコンパイル単位で行われます。ここに私のMWEがあります:clang false positiveリーク警告を抑制しようとしています

file2.c:実際の解放を行います。

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 --version 
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn) 
+0

「my_free」が「my_malloc」とペアになっていると思います。 – Groo

+0

@Groo:良い点。このMWEは、それが示唆しているところでは少し誤解を招くかもしれませんが、私は割り当てと割り当て解除が一般に対になるはずであることに同意します。 –

答えて

3

一つの方法:

#ifdef __clang_analyzer__ 
#define my_free free 
#endif 

これが行いますスタティックアナライザーは、古典的なfree関数を使用していると考え、不平を言うのをやめてください。

+0

お役立ち情報+1 – LPs

+0

すばらしい解決策です。コンテキストでは、私は少し異なるやり方でやる必要があります。あるいは、関数 'my_free()'を定義しようとするとコンパイラが文句を言うのですが、その原則が成立します。ありがとうございました。 –

関連する問題