I want to copy a char array to a QByteArray.
The Function :
char *tmpData = new char[64];
.....
msg->mBuffer = QByteArray::fromRawData(tmpData,msg->mBufferLen);
....
delete[] tmpData;
is just passing the pointer:
From Documentation: Constructs a QByteArray that uses the first size bytes of the data array. The bytes are not copied. The QByteArray will contain the data pointer.
After I delete the tmpData, the values which QByteArray is pointing of are gone. How can I make a copy with qt tools?
答案 0 :(得分:2)
只需使用appropriate constructor即可对数据进行深层复制...
char *tmpData = new char[64];
.....
msg->mBuffer = QByteArray(tmpData, msg->mBufferLen);
....
delete[] tmpData;
顺便说一句,您应该考虑使用诸如std::vector
之类的容器,而不要在代码中进行明确的new
/ delete
调用。
答案 1 :(得分:2)
从QByteArray::QByteArray(const char*, int)
构造函数文档中,我们可以看到
QByteArray对字符串数据进行深层复制。
与静态QByteArray::fromRawData
相对,后者声明了以下语义:
构造一个使用数据数组的第一个大小字节的QByteArray。字节不会被复制。
因此,您应该可以通过以下方式获取数据的深层副本
msg->mBuffer = QByteArray(tmpData, msg->mBufferLen);
在构造tmpData
之后重新分配msg->mBuffer
应该没问题。
答案 2 :(得分:1)
一开始不应该使用裸数组。将您的代码转换为:
{
QByteArray tmpData(64, Qt::Uninitialized);
.....
msg->mBuffer = tmpData;
.....
} // tmpData gets automatically destructed here
在大多数需要tmpData
的情况下,您可以使用char *
。