2 votes

Une fuite évidente que l'analyseur statique de Clang n'a pas détectée, pourquoi ?

J'ai écrit un code comme celui-ci,

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

J'ai oublié de libérer keyArray, et j'utilise du non-ARC, mais quand je clique sur "Analyze" dans le menu de Xcode, il ne détecte pas la fuite de keyArray.

Si je commente la ligne "NSArray *sortedKeys = ...", il peut détecter la fuite de keyArray.

Je me demande ce qui ne va pas avec l'analyseur statique.

J'apprécie vraiment votre aide.

1voto

Dmitry Shevchenko Points 11398

Il est important de comprendre que l'analyseur statique n'est pas toujours correct, ni toujours incorrect. Il peut générer des faux positifs et des faux négatifs. Cependant, les paramètres par défaut font en sorte que les chances de faux positif sont minimes. Dans ce cas particulier, je suppose que l'analyseur n'avait pas assez de données pour prendre une décision définitive sur ce qui se passe avec keyArray.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X