引发异常:写访问冲突. temp 为 nullptr

Exception thrown: write access violation. temp was nullptr

本文关键字:temp nullptr 访问冲突 异常      更新时间:2023-10-16

我在else语句中的insert()函数中出现错误。

这是结构:

struct Node
{
int data;
Node* next;
};
Node* head = NULL;

这是函数:

void insert(int data)
{
Node* New = new Node();
if (head == NULL)
{
New->data = data;
head = New;
}
else
{
// down here where the error occured
Node* temp = new Node();
temp = head;
while(temp != NULL)
{
temp = temp->next;
}
temp->data = data;
temp->next = New;
}
}

你的循环:

while(temp != NULL)

temp等于nullptr时终止(请注意,您最好在 C++ 中使用此常量而不是NULL(,并且紧接着您取消引用temp。此外,您没有任何理由将new的结果分配给temp并立即将其丢失下一行代码(导致内存泄漏(。并且您应该始终将data分配给新项目,而不是temp(假设是最后一个项目(您的逻辑应该是这样的:

void insert(int data)
{
Node* New = new Node();
New->data = data;     // note you better do these 2 lines in constructor
New->next = nullptr; 
if (head == nullptr)
{
head = New;
return;
}
Node* temp = head; 
while( temp->next != nullptr ) // look for the last item
temp = temp->next; 
temp->next = New;
}