从C+中的双链接列表中删除DUP+; P>干运行页时工作正常,但当我尝试在C++中运行该代码时,它会引发异常“访问违例读取定位”,请有人帮助我…… void dll::compress(){ Node *temp1, *temp2, *dup; temp1 = head; while (temp1 && temp1->next) { temp2 = temp1->next; while (temp2) { if (temp1->data == temp2->data) { dup = temp2; if (temp2->next != NULL){ temp2 = temp2->next; temp2->prev = temp1; temp1->next = temp2; delete dup; } else { temp1->next = NULL; delete temp2; } } else { temp2 = temp2->next; } } temp1 = temp1->next; } }

从C+中的双链接列表中删除DUP+; P>干运行页时工作正常,但当我尝试在C++中运行该代码时,它会引发异常“访问违例读取定位”,请有人帮助我…… void dll::compress(){ Node *temp1, *temp2, *dup; temp1 = head; while (temp1 && temp1->next) { temp2 = temp1->next; while (temp2) { if (temp1->data == temp2->data) { dup = temp2; if (temp2->next != NULL){ temp2 = temp2->next; temp2->prev = temp1; temp1->next = temp2; delete dup; } else { temp1->next = NULL; delete temp2; } } else { temp2 = temp2->next; } } temp1 = temp1->next; } },c++,C++,后删除temp2您保持循环,但是temp2既不是空的也无效 您需要将其设置为NULL或break退出循环。在此处发布gdb核心转储分析。如果您在linux上,要生成coredump,请在shell中执行以下命令:ulimit-c,运行exe,如果它崩溃,将生成一个核心文件,然后执行命令:gdb-c“core file name”exe.nameI在Windows上,使用Visual Studio(C++)@basavdelete temp2;temp2=NULL;试试这个谢谢它成功了@BASAV

后删除temp2
您保持循环,但是
temp2
既不是空的也无效


您需要将其设置为
NULL
break
退出循环。

在此处发布gdb核心转储分析。如果您在linux上,要生成coredump,请在shell中执行以下命令:ulimit-c,运行exe,如果它崩溃,将生成一个核心文件,然后执行命令:gdb-c“core file name”exe.nameI在Windows上,使用Visual Studio(C++)@basavdelete temp2;temp2=NULL;试试这个谢谢它成功了@BASAV删除
temp2
后是否应中断循环?设置temp2=NULL;删除后,我想应该工作。