2013-11-24 25 views
0

考慮下面的代碼片段(?):分析錯誤地抱怨一些合法

unichar* foo = (previously allocated); 

unichar* bar = reallocf(foo, 0); 

當我運行Xcode的分析命令,調用reallocf(),是因爲第二個參數的標記:

「調用'reallocf'的分配大小爲0字節」

但reallocf()的文檔部分說:「如果size [第二個參數]爲零且ptr不爲NULL,則新的最小大小對象被分配並且原始對象被釋放。「所以我對reallocf()的調用應該是完全合法的,不是嗎?

張望了一下谷歌搜索浮出水面此評論附着到LLVM做了一個補丁:

「發出警告的0分配大小reallocf,像realloc的。」

http://llvm.org/viewvc/llvm-project?view=revision&revision=166995

似乎是一個錯誤?

回答

0

這不是非法的,它只是一個可能的錯誤。這就是分析儀的用途。對於通過0大小的任何分配函數,分析器都會發出相同的警告。 current source cites安全編碼標準CERT MEM04-C。恐懼的是,程序稍後會假定一個非NULL指針可以被解引用並可能被寫入,而從零大小的分配中返回的那個不能。