删除内存时遇到困难

Difficulties deleting memory

本文关键字:遇到 内存 删除      更新时间:2023-10-16

我在处理内存时遇到了一些问题:我必须在新类中保留一些数据的副本。主要问题是应该丢弃此数据的前 9 个字节。但是,每当对象被删除时,我要么得到分段错误,要么得到SIGABRT(它甚至不一致)

class Frame
{
public:
    Frame();
    ~Frame();
    void setFirstData(uint8_t *data, size_t dataLength);
    void setSecondData(uint8_t *data, size_t dataLength);
    void setThirdData(uint8_t *data, size_t dataLength);
    void setFourthData(uint8_t *data, size_t dataLength);
    ...
private:
    unsigned char *_firstData;
    bool _firstDataSet;
    size_t _firstDataLength;
    unsigned char *_secondData;
    bool _secondDataSet;
    size_t _secondDataLength;
    unsigned char *_thirdData;
    bool _thirdDataSet;
    size_t _thirdDataLength;
    unsigned char *_fourthData;
    bool _fourthDataSet;
    size_t _fourthDataLength;
};
Frame::Frame()
{
    _firstDataSet = false;
    _secondDataSet = false;
    _thirdDataSet = false;
    _fourthDataSet = false;
}
Frame::~Frame()
{
    if (_firstDataSet)
        delete [] _firstData;
    if (_secondDataSet)
        delete[] _secondData;
    if (_thirdDataSet)
        delete[] _thirdData;
    if (_fourthDataSet)
        delete[] _fourthData;
}
void Frame::setFirstData(uint8_t *data, size_t dataLength)
{
    //copy all the data in a unsigned char*, except for the first 9 bytes
    _firstDataLength = dataLength - 9;
    _firstData = new unsigned char[_firstDataLength];
    memcpy(_firstData, data + 9, _firstDataLength*sizeof(*_firstData));
    /*for (int i = 0; i < dataLength - 9; i++)
    {
        _firstData[i] = (unsigned char) data[i + 9];
    }*/
    _firstDataSet = true;
}

其他 setData 函数与 setFirstData 相同,但具有正确的数组。

我应该使用memcpy以外的其他东西吗?还是用法错误?注释的 for 循环是我"复制"数据的原始方法,但我认为它实际上并没有复制数据(当复制的数据仍然可用时,原始数组将被删除)。

编辑:我添加了qt标签,因为我在Qt环境中工作并使用一些用于GUI的Qt类。我认为qt与这些基本的C++功能没有任何关系。

设置firstData

   _firstData = new unsigned char[_dataLength];
    memcpy(_firstData, data + 9, _dataLength*sizeof(*_firstData));