如何使用xcode删除mac osx上的char *数组?

时间:2014-02-13 04:58:11

标签: c++

int nSize; 
QString str; 
char *p = new char[nSize]; 
p = str.toLocal8bit.data();
delete[] p;

当我尝试删除Xcode 5.0.2中的char数组时出现调试错误,但是在Xcode 3.0.2中成功删除了此char数组。

2 个答案:

答案 0 :(得分:7)

如果它在任何地方成功删除,那就是一个错误。

char* p = new char[nSize];

到目前为止一切顺利。 p是一个char数组。

p = str.toLocal8bit.data();

p现在指向(推测)来自str.toLocal8bit的一些基础数据。您现在无法引用刚刚分配的内存。

delete[] p;

你现在已经删除了其他一些对象的内存。

答案 1 :(得分:3)

该行

p = str.toLocal8bit.data();

覆盖从new获得的指针。当您删除p时,您将删除无法控制的内存。

如果您确实需要字符串数据的副本,可以使用memcpystrcpy从字符串复制到数组(而不是分配)。

如果您实际上不需要副本,则可以执行以下操作:

const char* p = str.toLocal8bit.data();