删除内存困难

时间:2014-12-14 17:04:03

标签: c++ memory-management

我在使用内存方面遇到了一些麻烦:我必须在新课程中保留一些数据的副本。主要问题是该数据的前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循环是我原来的复制&#39;数据,但我不认为它实际上复制数据(当复制的数据仍然必须可用时,将删除原始数组。)

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

1 个答案:

答案 0 :(得分:0)

设置firstData

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