1

我收到此分析器警告

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

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

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

警告准确地说明了原因:

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

于 2013-10-29T22:08:02.877 回答