Link lists in C++ (pt. 2) [closed]
How come void del_begin()
crashes when there's only one node left (I have other functions to add nodes)?
#include <iostream>
using namesspace std;
node *start_ptr = NULL;
node *current;
int option = 0;
void del_end()
{
node *temp, *temp2;
temp = start_ptr;
if (start_ptr == NULL)
cout << "There are no nodes" << endl;
else
{
while (temp->nxt != NULL)
{
temp2 = temp;
temp = temp->nxt;
}
delete temp;
temp2->nxt = NULL;
}
}
void display()
{
node *temp;
temp = start_ptr;
cout << endl;
if (temp == NULL)
cout << "There are no nodes to display" << endl;
else
{
while(temp != NULL)
{
cout << temp->name << ", " << temp->profession << ", " << temp->age;
if (temp == current)
cout << "***";
cout << endl;
temp = temp->nxt;
}
cout << endl;
}
}
int main()
{
start_ptr = NULL;
int option;
do
{
display();
cout << "0 for EXIT" << endl;
cout << "1 to A开发者_StackOverflow中文版DD TO END" << endl;
cout << "2 to ADD TO BEGINNING" << endl;
cout << "3 to DELETE LAST" << endl;
cout << "4 to DELETE BEGINNING" << endl;
cout << ">>";
cin >> option;
switch (option)
{
case 1 : add_end(); break;
case 2 : add_begin(); break;
case 3 : del_end(); break;
case 4 : del_begin(); break;
}
}
while (option != 0);
return 0;
}
You didn't show us the code for del_begin()
, but your del_end()
has a bug in the case you're mentioning (single node list).
If you have only one node, your while
loop will never execute, and temp2
will be uninitialized when you get to the line:
temp2->nxt = NULL;
Crash!
If you have only one node, your while loop will never execute, and temp2 will be uninitialized
start_ptr & current are not reset appropriately on deletion.
This is not thread safe (in all sorts of ways) but for example you delete the next item before removing it from the list.
精彩评论