gpt4 book ai didi

C++ 程序卡在函数之间?

转载 作者:搜寻专家 更新时间:2023-10-31 01:10:10 24 4
gpt4 key购买 nike

我有一个冗长的程序,基本上管理一个哈希表;添加、删除等。不过,我在我的程序中遇到了一个非常奇怪的错误。

基本上我有一个删除函数,它对值进行哈希处理,检查存储在由适当对象的哈希值给定的数组中的链表,如果找到,则将其删除并退出该函数。它看起来基本上是这样的:

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

基本上,上面的程序输出“Are we getting here?”但不是“我们到了这个地方吗?”

我不知道在这种情况下可能存在什么问题,我花了很长时间才意识到这里可能存在问题。有谁知道问题可能是什么?

最佳答案

在这一行

LinkedList<T> list= data[(hash(t))]

您正在创建从数据中获取的 LinkedList 的拷贝。我打赌你不是要复制,而是要使用引用。此外,我猜它使用的是默认的复制构造函数,而不是你有意创建的。然后,当调用该 LinkedList 拷贝的析构函数时,它会删除仍由原始 LinkedList 保留的堆条目,从而导致堆损坏并最终挂起。

关于C++ 程序卡在函数之间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16201413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com