C++ c++;删除存储在vector中的链表的多个头/尾
我一直在尝试将链表的头和尾存储到向量中,并将其用作容器。 所以向量将有{head_1stLL,tail_1stLL,head_2ndLL,tail_2ndLL…} 问题是当我试图清理这个向量中的链表时。我找不到删除链接列表的方法。 调用CleanVector后,我使用target.clear()。 vector看起来是空的,但我仍然得到了分配给以前链接列表的内存,并且能够访问所有内容 为了简单起见,在我彻底修改代码以使用2D vector之前,我想知道哪里出了问题C++ c++;删除存储在vector中的链表的多个头/尾,c++,vector,linked-list,C++,Vector,Linked List,我一直在尝试将链表的头和尾存储到向量中,并将其用作容器。 所以向量将有{head_1stLL,tail_1stLL,head_2ndLL,tail_2ndLL…} 问题是当我试图清理这个向量中的链表时。我找不到删除链接列表的方法。 调用CleanVector后,我使用target.clear()。 vector看起来是空的,但我仍然得到了分配给以前链接列表的内存,并且能够访问所有内容 为了简单起见,在我彻底修改代码以使用2D vector之前,我想知道哪里出了问题 struct node {
struct node
{
Document doc;
node* next;
node* prev;
char LBnType; //Leg type and base definition
}
void cleanVector(标准::向量和目标)
{
节点*温度;
if(target.size()%2==0)
{
而(!target.empty())
{
node*head=target.front();
温度=水头;
target.erase(target.begin());
node*tail=target.front();
target.erase(target.begin());
deepCleanLL(头部、尾部);
if(temp!=NULL)//这里表示未删除
{
C++中没有规则表示你不能访问被删除的内存。< /P>
< C++ >如果你试图访问删除的内存,那么程序就有(UB)。这意味着你的程序可以做<强>任何< /强>,任何东西都包括能够访问被删除的内存,就像它没有被删除一样。
初学者通常认为,当他们的代码出现错误时,这意味着他们的程序必须崩溃或产生错误的结果,或必须产生错误消息。但这不是真的,所有这些事情都可能发生,但也可能是程序似乎正常工作。所有这些事情都可能发生,因为它们都被未定义的beh覆盖阿维欧
这意味着要区分正确的程序和错误的程序要困难得多,因为有时错误的程序会按预期工作
<除了在删除列表后尝试打印一个列表,您的代码对我来说是正确的。 没有C++中的规则,表示不能访问已删除的内存。
< C++ >如果你试图访问删除的内存,那么程序就有(UB)。这意味着你的程序可以做<强>任何< /强>,任何东西都包括能够访问被删除的内存,就像它没有被删除一样。
初学者通常认为,当他们的代码出现错误时,这意味着他们的程序必须崩溃或产生错误的结果,或必须产生错误消息。但这不是真的,所有这些事情都可能发生,但也可能是程序似乎正常工作。所有这些事情都可能发生,因为它们都被未定义的beh覆盖阿维欧
这意味着要区分正确的程序和错误的程序要困难得多,因为有时错误的程序会按预期工作
除了试图在列表被删除后打印列表外,我认为您的代码是正确的。找到了另一个真正有效的答案。
有严重的编码问题。答案可以在下面的链接中找到。
问题是,在释放内存之前,我将指针指定为NULL,从而使指针悬空
我希望这能帮助一些人。找到了另一个真正有效的答案。
有严重的编码问题。答案可以在下面的链接中找到。
问题是,在释放内存之前,我将指针指定为NULL,从而使指针悬空
我希望这能帮助一些人。谢谢你的快速回复。你介意帮我再问一个问题吗?当我运行程序时,每次我删除充满链表的向量并给它新的链表时,我都会发现内存一直翻倍。我正在与mingw和valgrind一起开发此程序,无法使用,并且drmemory由于64位环境。所以我没有可靠的工具来查看正在发生的事情。在我看来,如果内存被释放,我希望看到ram内存(如任务管理器中所示)保持不变,或者至少不增加一倍(非常一致)。你认为我应该担心这个吗?当它的内存被删除时,它会被释放以重新使用到程序中,而不是系统中。因此,被删除的内存不会在任务管理器中显示为内存使用量减少。通常,只有当程序退出时,内存才会被释放回系统。非常感谢。这一直困扰着我的som问题谢谢你的快速回复。你介意帮我再问一个问题吗?当我运行程序时,每次我删除充满链表的向量并给它新的链表时,我都会偶然发现内存一直翻倍。我正在用mingw开发这个程序,valgrind无法使用,drmemory由于64位环境而崩溃。所以我不知道在我看来,如果内存被释放,我希望ram内存(如任务管理器中所示)保持不变,或者至少不会增加一倍(非常一致)。你认为我应该担心这个吗?当它的内存被删除时,它会被释放以重新使用到程序中,而不是系统中。因此,被删除的内存不会在任务管理器中显示为内存使用量减少。通常,只有当程序退出时,内存才会被释放回系统。非常感谢。这一直困扰着我的som问题电子时间
void cleanVector(std::vector <node*> &target)
{
node* temp;
if(target.size()%2 ==0 )
{
while(!target.empty())
{
node* head = target.front();
temp = head;
target.erase(target.begin());
node* tail = target.front();
target.erase(target.begin());
deepCleanLL(head, tail);
if(temp != NULL) // here it says not deleted
{
cout << "FAILED TO DELETE" << endl;
printList(temp); //this was to test if I can still access LL
}
}
}
else
cout << "ERROR: nodeDeepCleanVector. Target size not even" << endl;
}
void deepCleanLL(node* &begin, node* &end)
{
node* current = end;
node* temp = begin;
while(current == NULL)
{
node* currentLag = current;
current = current->prev;
current->next = NULL;
current->prev = NULL;
delete currentLag;
currentLag = current;
}
if(temp != NULL)
{//temp here says LL is cleaered
cout<< "delete failed" << endl;
printList(temp);
}
}