2009-10-26 4 views
1

J'utilise CFRelease pour libérer le CFStringTokenizerRef obtenu à partir de l'appel CFStringTokenizerCreate. Mais les instruments signalent une fuite de mémoire autour de cette zone. Est-ce que je manque quelque chose?Comment libérer la mémoire créée à partir de CFStringTokenizerCreate?

 

    CFStringTokenizerRef tokenRef = CFStringTokenizerCreate(NULL, 
            (CFStringRef)contents, 
            CFRangeMake(0, contents.length), 
            kCFStringTokenizerUnitWordBoundary, 
            NULL); 

    CFStringTokenizerTokenType tokenType; 
    // leak reported here 
    while ((tokenType = CFStringTokenizerAdvanceToNextToken(tokenRef)) != kCFStringTokenizerTokenNone) 

} 

CFRelease(tokenRef); 
+0

Il semble qu'il y ait une accolade manquante après ce moment, cette CFRelease n'est pas dans la même portée. Est-ce une erreur de copier/coller? –

Répondre

0

CFStringTokenizerCreate suit le Create Rule. Donc vous appelez comme prévu.

Il semble qu'il y ait une accolade manquante après ce moment, ce CFRelease n'est pas dans la même portée. Est-ce une erreur de copier/coller?

+0

Le code présenté présente une erreur de syntaxe, car 'while' nécessite une instruction suivant la condition, et le code affiché n'en a pas (condition immédiatement suivie de l'accolade fermante de l'instruction composée externe ou du corps de la fonction/méthode). Je pense qu'il est trop tôt pour évaluer la portée du contenu jusqu'à ce que le code affiché soit valide. –

Questions connexes