我定义了一个包含字节数组及其长度的结构。析构函数应该只删除字节数组,如果它是由结构的构造函数动态实例化的。但有时,delete array;
指令失败,错误为pointer being freed was not allocated
。这个数组在结构中实例化似乎很奇怪。任何人都可以帮我弄清楚什么是错的吗?
typedef unsigned char byte_t;
struct bytes_t {
bytes_t(varint_t c) : array(new byte_t[c]), count(c), alloc(true) {}
bytes_t(byte_t b[], varint_t c) : array(&b[0]), count(c), alloc(false) {}
~bytes_t() {
if (alloc)
delete array;
}
byte_t* array;
varint_t count;
bool alloc;
};
修改:改变了我的代码,但似乎仍然失败了。它从主线程调用时有效,但不能从另一个线程调用。
class bytes_t {
private:
byte_t* const array_;
const varint_t count_;
const bool alloc_;
public:
bytes_t(varint_t c) : array_(new byte_t[c]), count_(c), alloc_(true) {}
bytes_t(byte_t* b, varint_t c) : array_(b), count_(c), alloc_(false) {}
~bytes_t() {
if (alloc_)
delete[] array_;
}
byte_t* getArray() {
return array_;
}
varint_t getCount() {
return count_;
}
};
编辑:我关注了@ Jens'建议并使用std::vector
代替。像魅力一样工作!
答案 0 :(得分:2)
你班上有一些问题:
您是否考虑过使用std::vector
而不是编写自己的实现?