考虑以下代码片段:
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
好像是个错误?
答案 0 :(得分:0)
这不是违法的,只是一个可能的错误。这就是分析仪的用途。分析器为传递0大小的任何分配函数提供相同的警告。 current source cites安全编码标准CERT MEM04-C。令人担心的是程序稍后会假设非NULL
指针可以被解除引用并且可能被写入,而从零大小分配返回的指针则不能。