Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;删除存储在vector中的链表的多个头/尾_C++_Vector_Linked List - Fatal编程技术网

C++ c++;删除存储在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 {

我一直在尝试将链表的头和尾存储到向量中,并将其用作容器。 所以向量将有{head_1stLL,tail_1stLL,head_2ndLL,tail_2ndLL…}

问题是当我试图清理这个向量中的链表时。我找不到删除链接列表的方法。 调用CleanVector后,我使用target.clear()。 vector看起来是空的,但我仍然得到了分配给以前链接列表的内存,并且能够访问所有内容

为了简单起见,在我彻底修改代码以使用2D vector之前,我想知道哪里出了问题

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);
        }


}