我正在研究 bitset 实现。bitset 使用一个数组unsigned long long
来存储位。
class bitset{
typedef unsigned long long uint64;
uint64* bits;
...
}
由于我需要这个位集来存储大量数据,我发现当我初始化uint64
使用new
关键字在堆上构建它的数组时,它的效果最好。
bitset::bitset(int n_bits){
if (n_bits % 64 !=0) size (n_bits / 64) + 1;
else size = n_bits / 64;
this->data = new uint64[size];
}
这样做可以让我的程序始终如一地允许我的整个程序访问位数组。我遇到的一个问题是我的析构函数似乎无法删除数据
bitset::~bitset(){
delete[] this->data;
}
在没有析构函数的情况下工作,我得到了内存泄漏(如预期的那样),使用析构函数我得到一个运行时错误Error in `./a.out': double free or corruption (out):
,我尝试谷歌搜索无济于事。我对 c++ 相当陌生,因此对类中堆栈/堆行为的任何见解都将不胜感激。