删除内存时遇到困难
Difficulties deleting memory
我在处理内存时遇到了一些问题:我必须在新类中保留一些数据的副本。主要问题是应该丢弃此数据的前 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));
相关文章:
- 将字符串存储在c++中的稳定内存中
- 编译包含字符串的代码时遇到问题
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 交换两个字符串时访问正确的内存时,我遇到了分段错误
- 在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误
- 我在内存泄漏和字符串方面遇到了一个非常奇怪的问题
- C++释放矢量元素占用的内存时遇到的麻烦
- 为什么我会因Valgrind遇到内存错误?(C ,抽象语法树评估)
- 错误:遇到非法内存访问
- 咖啡错误 == cuda成功(77 与 0)遇到非法内存访问
- 当遇到很长的循环时,会出现分段错误:11 或内存分配错误
- CUDA 直方图遇到非法内存访问 (77)
- C++ 我在数组/动态内存方面遇到了一些问题
- 我使用构造函数(使用内存 Dinamic char *t = 新字符 [10] t = "test123456" ;))时遇到错误堆错误并在析构函数中删除 [] t;错误
- 删除内存时遇到困难
- 使用类向量时会遇到内存泄漏吗?(C++)
- 在c++中为char*分配内存时遇到麻烦
- 使用VJSON在C++中解析FB好友列表,遇到内存问题,我该如何解决
- f流<无法读取内存>。打印列表中所有项目时遇到问题