我正在尝试创建链接列表,但我遇到了有关内存访问的问题。我调试代码,看看它给出了错误,但无法解决。使用'添加手表',可以看到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.
我该如何解决?
答案 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
循环中的最后一个语句,那么实际上会更好。这就是为什么你不必为两种情况做同样的事情。