简体   繁体   English

明显的泄漏,但c静态分析器未检测到,为什么?

[英]An obvious leak but clang static analyzer didnot detect, Why?

I wrote some code like this, 我写了一些这样的代码,

- (NSString*) caleSignParam:(NSMutableArray*)postData
{
    NSMutableArray* keyArray = [[NSMutableArray alloc] initWithCapacity:50];

    ......
    NSArray* sortedKeys = [keyArray sortedArrayUsingComparator:
                       (NSComparator)^(NSString *obj1, NSString *obj2) {
                           return [obj1 compare:obj2 options:NSLiteralSearch];
                       }];
    ......


    NSString* signStr = aString;

    return signStr;
}

I forgot to release keyArray, and using non-ARC, but when I click "Analyze" on the menu of Xcode, it didnot detect the leak of keyArray. 我忘了释放keyArray,并使用非ARC,但是当我单击Xco​​de菜单上的“分析”时,它没有检测到keyArray的泄漏。

If I comment the line of "NSArray *sortedKeys = ...", It can detect the leak of keyArray. 如果我注释“ NSArray * sortedKeys = ...”这一行,它可以检测到keyArray的泄漏。

I wonder what's wrong with static analyzer. 我想知道静态分析器怎么了。

I really appreciate your help. 非常感谢您的帮助。

It's important to understand that static analyzer is not always correct, nor it is always incorrect. 重要的是要了解静态分析器并不总是正确的,也不总是错误的。 It can throw false positives and false negatives. 它可能会带来误报和误报。 However default settings make it so that chances of false positive are minimal. 但是,默认设置可以使误报的可能性降到最低。 In this particular case I would guess that analyzer did not have enough data to make a definite decision of what happens with keyArray 在这种特殊情况下,我想分析器没有足够的数据来确定keyArray会发生什么

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM