Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 内存管理QByteArray::fromRawData()_C++_Qt - Fatal编程技术网

C++ 内存管理QByteArray::fromRawData()

C++ 内存管理QByteArray::fromRawData(),c++,qt,C++,Qt,在我的程序中,我有一个处理一些数据并将其发送回的函数。在函数中,我分配了一个新的字节数组,其中包含以下内容: byte *buffer = new byte[bufferSize]; 然后我将其传递给一个库,该库用一些数据填充它。一旦完成,我想把它作为QByteArray发送回去。因此,我呼吁: myByteArray = QByteArray::fromRawData(reinterpret_cast<const char*>(buffer), bufferSize); 字节数

在我的程序中,我有一个处理一些数据并将其发送回的函数。在函数中,我分配了一个新的字节数组,其中包含以下内容:

byte *buffer = new byte[bufferSize];
然后我将其传递给一个库,该库用一些数据填充它。一旦完成,我想把它作为QByteArray发送回去。因此,我呼吁:

myByteArray = QByteArray::fromRawData(reinterpret_cast<const char*>(buffer), bufferSize);
字节数组被返回,一切正常,但我现在有一个内存泄漏非常肯定,因为我的RAM使用量猛增,因为我调用了数千次。当我使用new分配缓冲区时,调用fromRawData后无法删除它,因为myByteArray共享同一个数据指针。未复制字节的状态。QByteArray将包含数据指针

所以我的问题是,当myByteArray超出范围时,如何确保删除缓冲区?它超出了调用函数的类的范围


感谢您的时间。

您可以直接从QByteArray开始,而不是手动分配带有新[]的阵列


从原始数据创建时,您负责内存管理。接受此责任。我只是不确定处理这个问题的最佳方式,因为我的QByteArray被发送到各地
QByteArray myByteArray;
myByteArray.resize( bufferSize );
byte * buffer = myByteArray.data(); // Pointer to the memory allocated by the QByteArray
// Pass 'buffer' to library function..