1

このアナライザー警告が表示されました

メッセージ式の引数が初期化されていない値です

次のコードの 2 行目の 2 番目の角括弧の下に小さなオレンジ色の矢印があります

- (NSString *)base64EncodedString
{
    size_t outputLength;
    char *outputBuffer =
        NewBase64Encode([self bytes], [self length], true, &outputLength);



    NSString *result =
        [[[NSString alloc]
            initWithBytes:outputBuffer
            length:outputLength
            encoding:NSASCIIStringEncoding]
        autorelease];
    free(outputBuffer);
    return result;
}

何が原因なのかはわかりませんが、いくつかのことを試しましたが、このタイプのアナライザーの警告は一度もありませんでした。

このアナライザーの警告を取り除くにはどうすればよいですか?

4

2 に答える 2

5

宣言すると

size_t outputLength;

あなたはそれを初期化していません。アナライザーはNewBase64Encode、それがその値を設定することを認識していないため、問題が発生する可能性があることを警告しています。

値が後で初期化されることが 100% 確実である場合は、アナライザーの警告を安全に無視できますが、これはまれなケースです。たとえば、NewBase64Encode失敗して初期化されずoutputLength、未定義の動作につながる可能性があります。

宣言するすべての変数を初期化することを常にお勧めします。特定のケースでは、

size_t outputLength = 0;

アナライザーは満足し、コードはより安全になります。

于 2013-10-29T22:22:54.530 に答える
1

警告には、正確な理由が示されています。

使用された引数の 1 つが初期化されていません。outputBuffer、outputLength を明示的にデフォルト値に設定すると、警告は消えます。

于 2013-10-29T22:08:02.877 に答える