2010-07-01 63 views
-3

当只剩下一个节点(我有其他功能添加节点)时,void del_begin()怎么会崩溃?C++中的链接列表(pt。2)

#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 ADD 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; 
} 
+6

您没有向我们展示'del_begin()'的代码...... – 2010-07-01 22:46:15

+4

Uhm,C++在哪里?除了cout,这可能也是C. – 2010-07-01 22:50:58

+0

list <>或slist <>可能会更好地为您服务。 – 2010-07-01 22:58:22

回答

1

你没有表现出我们del_begin()的代码,但你del_end()在你提及的情况下的一个错误(单节点列表)。

如果你只有一个节点,你while循环将不会执行,而当你站上罚球线temp2将是未初始化:

temp2->nxt = NULL; 

崩溃!

+0

我该如何解决它? – danutenshu 2010-07-01 23:05:45

+1

@danutenshu:您改为使用库列表类来修复它。有没有理由让你不得不推出自己的? – 2010-07-01 23:10:26

+0

我被分配制作自己的链接列表。你能解释更多吗?我没有看到 – danutenshu 2010-07-01 23:19:36

0

如果你只有一个节点,while循环将不会执行,并TEMP2将未初始化

start_ptr &目前没有适当重置删除。

这不是线程安全的(以各种方式),但是例如在从列表中删除它之前删除下一个项目。