2013-10-17 63 views
0

這是用於在C++中實現單向鏈表的代碼。 正在執行三項基本操作,即插入,刪除和顯示。數據從主函數傳遞。代碼得到了遵守,但在執行過程中顯示「分段錯誤」。 請告訴我代碼有什麼問題。我在執行此程序時出現「分段錯誤」

#include<iostream> 
using namespace std; 
class list 
{ 
    private: 
     typedef struct node 
     { 
      int data;` 
      node* next; 
     }* nodeptr; 
     nodeptr head; 
     nodeptr curr; 
     nodeptr temp; 
    public: 
     list(); 
     void insert(int addData); 
     void delet(int delData); 
     void display(); 
}; 
list::list() 
{ 
    head=NULL; 
    curr=NULL; 
    temp=NULL; 
} 
void list::insert(int addData) 
{ 
    nodeptr n=new node; 
    n->next=NULL; 
    n->data=addData; 
    if(head!=NULL) 
    { 
     curr=head; 
     while(curr!=NULL) 
     { 
      curr=curr->next; 
     } 
     curr->next=n; 
    } 
     else 
    { 
     head=n; 
    } 
}  
void list::delet(int delData) 
{ 
    nodeptr delptr=NULL; 
    temp=head; 
    curr=head; 
    while(curr!=NULL&&curr->data!=delData) 
    { 
     temp=curr; 
     curr=curr->next; 
    } 
    if(curr==NULL) 
    { 
     cout<<"Data not found."; 
     delete delptr; 
    } 
    else 
    { 
     delptr=curr; 
     curr=curr->next; 
     temp->next=curr; 
     delete delptr; 
    } 
} 
void list::display() 
{ 
    curr=head; 
    while(curr!=NULL) 
    { 
     cout<<"\n"<<curr->data; 
     curr=curr->next; 
    } 
} 
int main() 
{ 
    list l; 
    l.insert(1); 
    l.insert(2); 
    l.insert(3); 
    l.insert(4); 
    l.insert(5); 
    l.display(); 
    cout<<"\nDeleting:"; 
    l.delet(3); 
    l.display(); 
    l.delet(5); 
    l.display(); 
    return 0; 
} 
+0

首先編譯調試信息(添加標誌'-g'到GCC)。然後在調試器'gdb'中運行你的程序,它會在出錯的地方停止。使用'gdb'中的'bt'命令來查找調用堆棧,然後編輯問題以包含它(如果你自己弄不清楚的話)。 –

+1

順便說一句,結構等同於C++中的類(默認訪問)。使用構造函數和destrubtor來獲得更好的穩定性。 – Bathsheba

+0

@Bathsheba我使用了析構函數,仍然顯示「Segmentation fault(核心轉儲)」 – user2740669

回答

3

問題是與插入功能:

curr=head; 

while(curr!=NULL) 
{ 
    curr=curr->next; 
} 
curr->next=n; 

達到CURR後爲null,你訪問它。它應該是:

curr=head; 

while(curr->next !=NULL) 
{ 
    curr=curr->next; 
} 
curr->next=n; 
+0

是的,現在它的工作。 thanx很多人@Sumeet – user2740669

+0

不客氣......感謝Joachim正確的格式化... – Sumeet

相關問題