为什么分析仪警告“未初始化的价值”?

时间:2013-10-29 22:02:03

标签: objective-c clang-static-analyzer

我收到了此分析器警告

  

消息表达式中的参数是未初始化的值

在下面代码第二行的第二个方括号下面有一个小橙色箭头

- (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;
}

我不确定是什么导致这种情况我尝试了几件事,但从来没有我有过这种类型的分析仪警告。

如何摆脱此分析器警告?

2 个答案:

答案 0 :(得分:5)

宣布

size_t outputLength;

你没有初始化它。分析器不知道NewBase64Encode将设置其值,因此它会警告您可能出现问题。

如果您绝对100%确定稍后将初始化该值,那么您可以安全地忽略分析器警告,但这种情况很少发生。例如,NewBase64Encode可能会失败,outputLength将导致未初始化,从而导致未定义的行为。

初始化您声明的每个变量始终是一个好习惯,因此在特定情况下只需执行

size_t outputLength = 0;

分析仪会很开心,您的代码更安全。

答案 1 :(得分:1)

警告说明了原因:

您使用过的一个参数未初始化。如果你明确地将outputBuffer,outputLength设置为某​​个默认值,警告就会消失。