2016-06-28 26 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[]不再需要的字節。

相關問題