3

在Xcode 4.6中,鏗鏘靜態分析器警告我有關「調用CFRelease中的空指針參數」。Clang靜態分析器警告「調用CFRelease中的空指針參數」

這裏的分析預警的截圖:

Clang Static Analyzer Warning

這裏就是你要複製&的情況下,代碼貼吧:

- (void)test 
{ 
    CFUUIDRef aUUID = CFUUIDCreate(kCFAllocatorDefault); 
    [self setUUID:aUUID]; 
    CFRelease(aUUID); 
} 

- (void)setUUID:(CFUUIDRef)uuid 
{ 
    _uuid = uuid ? CFRetain(uuid) : CFUUIDCreate(kCFAllocatorDefault); 
} 

我不明白爲什麼它是警告我。 aUUID永遠不能是空指針,可以嗎?我已經學會了比我使用的工具更不信任自己,所以我在這裏問。如果有人向我解釋我錯過了什麼,我會很高興。

+3

'如果分配失敗,'CFUUIDCreate()'可能返回'NULL',但分析器警告的邏輯錯誤。 '-UUID'在'-setUUID:'中沒有改變,所以無論uuid是否爲空,'aUUID'仍然可以爲空。 –

回答

0

任何返回分配值的東西在理論上都可能返回NULL。

分析儀遵循多種可能的執行路徑。在遵循「aUUID爲NULL」的情況下,它最終結束於NULL對象的CFRelease。

這不是setUUID是原因,這只是問題被發現的路徑,所以這就是說明的路徑。