Linkedlist内存读取错误

时间:2014-10-13 21:31:29

标签: c++ pointers memory-management linked-list

我正在尝试创建链接列表,但我遇到了有关内存访问的问题。我调试代码,看看它给出了错误,但无法解决。使用'添加手表',可以看到next无法读取内存错误。

struct Node
{
    string Name;
    Node* next;
};

struct LinkedList
{
    Node* head = NULL;
    bool isX = true;
};


LinkedList* initX(string Arr)
{
    LinkedList* link = new LinkedList;
    for (int i = 0; i < 15; i++)
    {
        Node* temp = new Node;
        temp->Name = Arr[i];
        Node* ptr = new Node;
        ptr = link->head;
        if (link->head != NULL)
        {
            while (ptr->next)
            {
                ptr = ptr->next;
            }
            ptr->next = temp;
            temp->next = NULL;
        }
        else
            link->head = temp;
    }
    return link;
}
Unhandled exception at 0x008E8AF7 in ...exe: 0xC0000005: Access violation reading location 0xCDCDCDE9.

我该如何解决?

1 个答案:

答案 0 :(得分:1)

link->head语句的temp部分中将else设置为if后,您未将temp->next设置为NULL ,因此可以使用temp->next,就像它在未定义的行为中有一个值一样。将其添加到您的else部分:

else {
    link->head = temp;
    temp->next = NULL; // or nullptr
}

如果你同时移动temp->next = NULL,将它们组合成一个,并将其作为for循环中的最后一个语句,那么实际上会更好。这就是为什么你不必为两种情况做同样的事情。