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数组。
答案 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
时,您将删除无法控制的内存。
如果您确实需要字符串数据的副本,可以使用memcpy
或strcpy
从字符串复制到数组(而不是分配)。
如果您实际上不需要副本,则可以执行以下操作:
const char* p = str.toLocal8bit.data();