我正在构建一个使用线性探测作为其冲突解决方法的哈希表,并且我最后一次检查了。复制到表中无法找到应该存在的密钥,因为它在检查之前已从原始哈希表中删除。
template <class TYPE>
LPTable<TYPE>::LPTable(const LPTable<TYPE>& other){
max_ = other.max_;
LargerMax = other.LargerMax;
size_ = other.size_;
if (other.size_)
{
records_ = new Record*[other.LargerMax];
for (int i = 0; i < other.size_; i++) // chasnged size from larger max
{
if (other.records_[i] != nullptr)
{
records_[i] = new Record(); //throws exception after this loop
records_[i]->key_ = other.records_[i]->key_;
records_[i]->data_ = other.records_[i]->data_;
records_[i]->isDeleted = other.records_[i]->isDeleted;
}
}
}
else
size_ = 0;
}
答案 0 :(得分:0)
records_
类的LPTable
字段不必是指向指针的指针;一个指针就足够了,这很可能是你问题的根源。此外,你应该非常可能更喜欢这个任务的向量。
您看到的奇怪行为是因为LPTable
的复制构造函数中的错误。你正在分配一个指针数组,然后遍历other
并复制指针。
换句话说,您不是要复制指针引用的Record
实例。
“复制自”和“复制到”LPTable的records_
数组中的对应指针引用Record
类的相同实例。因此,当您修改“复制自”哈希表中的条目时,这些更改将反映在“复制到”哈希表中