c++ - 读取访问冲突,温度为 0xDDDDDDDD
问题描述
void deleteBasedOnID(student* head,student* tail,int stu_ID)
{
if (head == NULL)
{
std::cout << "nothing to be deleted";
}
else if (stu_ID == head->stu_ID)
{
//delete from the beginning
temp = head->next;
if (temp == NULL)
{
tail = NULL;
}
else
{
temp->prev = NULL;
}
std::cout << "Deleted ID: " << head->stu_ID << std::endl;
delete head;
head = temp;
}
else
{
//start from second
temp = head;
previous = NULL;
while (stu_ID != temp->stu_ID)
{
previous = temp;
temp = temp->next;
if (temp == NULL)
{
std::cout << "no such ID!" << std::endl;
return;
}
}
previous->next = temp->next;
if (temp->next == NULL)
{
tail = previous;
}
else
{
temp->next->prev = previous;
}
std::cout << "Deleted ID: " << temp->stu_ID << std::endl;
delete temp;
}
}
我有一个学生结构和全局指针头和尾,我将所说的头和尾放入 deleteBasedOnID 头和尾参数
它适用于 if(head == NULL) 或 else 块,但是每当我尝试从头开始删除时,它在内部工作正常,但在我尝试显示列表后,发生错误。
这是我的显示功能体
void display()
{
temp = head;
while (temp != NULL)
{
std::cout << "Student ID: " << temp->stu_ID << std::endl;
temp = temp->next;
}
}
主功能
int main()
{
head = NULL;
tail = NULL;
temp = NULL;
int id;
std::cout << std::endl;
std::cout << "Enter the id you want to delete: ";
std::cin >> id;
deleteBasedOnID(head, tail, id);
std::cout << "New sorted list" << std::endl;
display();
return 0;
}
解决方案
在您的deleteBasedOnId
-function 中,您更改参数的值,这是指向您在 中创建head
的指针的副本。in 中的原始指针保持其值,该值现在指向已删除的内存,因此出现了段错误。您可以引用指向的指针作为参数来解决此问题:head
main
main
head
void deleteBasedOnID(student*& head,student*& tail,int stu_ID)
推荐阅读
- php - PHP根据日期和时间有条件地使表单字段只读
- python-3.x - 如何从 AWS 策略文档中获取操作值并将其存储为列表?
- sql - SQL 选择具有特定值的不同 ID
- python - 在 Python 中绘制 4D 轮廓(X、Y、Z + 数据)
- html - 我的 css 在 bootstrap 4 中不起作用我该如何解决?
- c - 警告 C4244:'function':从 'int' 转换为 'float',可能丢失数据
- tensorflow - TensorFlow 2 中层的动态输入形状
- iterator - 迭代序列后未触发聚合序列中的 OnComplete
- r - 同样的错误来自哪里,执行 LMER 测试?附资料
- java - Java - 如何从 xml 验证文件中捕获所有异常/错误