2

XCode 4.6用のアナライザーと新しいclangコンパイラーを実行すると、多くの警告が表示されます

呼び出されたC++オブジェクトポインタがnull

のような警戒された表現でも

- (BOOL) validate: (Node*) node
{
    if (!self.hypertext) return YES;
    return self.hypertext->HasNode(node);
}

1)静的アナライザーにこれが適切に保護されていることをどのように納得させることができますか?2)状況によっては、ポインタがnullにならないことを表明したい場合があります。どのように?

4

2 に答える 2

6

ここでの問題は、ポインタではなく、ObjC呼び出しの結果で作業していることです。

非常にまれですが、アナライザーは次の場合を認識します。最初の呼び出しで返されたポインターがnullではないため、テストに合格し、2番目の呼び出しで返されたポインターがnullになります。

ローカル変数で問題を解決できるはずです。

- (BOOL) validate: (Node*) node
{
    YourType ht = [self hypertext];
    if (!ht) return YES;
    return ht->HasNode(node);
}
于 2013-02-15T19:06:19.143 に答える
1

clang static Analyzerは、ポインターがnullではないと予想されることを宣言するための関数で「nonnull」属性をサポートしているようです。ただし、代わりにObj-Cメソッドに適用するかどうかはわかりません。

int bar(int*p, int q, int *r) __attribute__((nonnull(1,3)));

http://clang-analyzer.llvm.org/annotations.html#attr_nonnull

于 2013-02-08T19:41:28.093 に答える