我有一个冗长的程序,基本上管理一个哈希表;添加,删除等。不过,我在我的程序中遇到了一个非常奇怪的错误。
基本上我有一个删除函数,它散列一个值,检查存储在一个由适当对象的散列值给出的数组中的链表,如果找到,删除它并退出函数。它看起来基本上是这样的:
template<typename T>
void HashTable<T>::remove(T* t){
LinkedList<T> list= data[(hash(t))];
Node<T>* prev = NULL;
Node<T>* cur = list.head;
bool running = cur != NULL;
while(running){
T key = cur->getKey();
if(t == key){
if(prev == NULL){
cur = cur->getNext();
running = false;
}else{
prev->setNext(cur->getNext());
cout << &key << '\n';
cur = NULL;
running = false;
}
}
prev = cur;
cur = cur->getNext();
}
cout << "Are we getting here?"; //yes
}
我以这种方式调用此函数:
Type* b = buildType(); //produces a Type* from CL arguments
hash.remove(b);
cout << "Are we getting to THIS SPOT?"; //no
基本上,上面的程序输出“我们到了吗?” 但不是“我们到达这个地点了吗?”
我不知道在这种情况下可能是什么问题,我花了很长时间才意识到这里可能存在问题。有谁知道问题可能是什么?