分析器错误地抱怨合法的东西(?)

时间:2013-11-24 07:49:50

标签: xcode unix llvm

考虑以下代码片段:

unichar* foo = (previously allocated);

unichar* bar = reallocf(foo, 0);

当我运行Xcode的Analyze命令时,由于第二个参数,对reallocf()的调用被标记:

“调用'reallocf'的分配大小为0字节”

但reallocf()的文档部分说明:“如果size [第二个参数]为零且ptr不为NULL,则分配一个新的最小大小的对象,并释放原始对象。”所以我对reallocf()的调用应该是完全合法的,不是吗?

谷歌上写了一下这个评论附在LLVM上的补丁:

“警告重新分配大小为0的reallocf,就像realloc一样。”

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

好像是个错误?

1 个答案:

答案 0 :(得分:0)

这不是违法的,只是一个可能的错误。这就是分析仪的用途。分析器为传递0大小的任何分配函数提供相同的警告。 current source cites安全编码标准CERT MEM04-C。令人担心的是程序稍后会假设非NULL指针可以被解除引用并且可能被写入,而从零大小分配返回的指针则不能。