2016-06-28 27 views
0

Xcode 8(beta 1)中的静态分析器警告我NSStringinitWithBytesNoCopy:length:encoding:freeWhenDone:无法取得由new[]分配的内存的所有权。这是一个错误吗?如果没有,为什么会出现这种情况?为什么NSString不能获取新分配的内存的所有权?

如果我将配置更改为使用calloc而不是new[],警告消失。

+1

我猜NSString和C++混合不好。 – Avi

+0

@ user3386109将其作为答案发布。 –

+0

@ AminNegm-Awad好的,我将评论转换为答案。 – user3386109

回答

4

文档说此有关freeWhenDone参数:

如果是,则接收机释放与存储器免费()当不再需要 数据它;如果不是,它不会。

因此freeWhenDone字面上完成后调用free()。要使用new[],完成后必须要delete[]。因此,警告信息是正确的。如果你不想复制字节,那么你需要设置freeWhenDoneNOdelete[]不再需要的字节。

相关问题