开发者

Link lists in C++ (pt. 2) [closed]

This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center. Closed 10 years ago.

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜