這是用於在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;
}
首先編譯調試信息(添加標誌'-g'到GCC)。然後在調試器'gdb'中運行你的程序,它會在出錯的地方停止。使用'gdb'中的'bt'命令來查找調用堆棧,然後編輯問題以包含它(如果你自己弄不清楚的話)。 –
順便說一句,結構等同於C++中的類(默認訪問)。使用構造函數和destrubtor來獲得更好的穩定性。 – Bathsheba
@Bathsheba我使用了析構函數,仍然顯示「Segmentation fault(核心轉儲)」 – user2740669