好吧。我用一個簡單的鏈接列表代碼付款。簡單鏈接列表代碼上的奇怪結果
我把頭節點保持公開。然後我聲明一個指針(head2)來存儲第一個列表的頭節點(第一個)到主程序中。我聲明第二個名爲second的列表,並將head2指定爲第二個列表的頭節點。然後我刪除head2。然後我訪問「第二個」(其頭節點被刪除)的成員並打印出來。我預料會出現分段錯誤。 但它的工作原理是,只爲頭節點的數據打印0。令我費解的是,如果頭節點被刪除,頭節點的下一個指針如何仍然在內存中? (這是由印刷通過list.I遍歷訪問正在使用克++ 4.6.1在Ubuntu.Here是代碼:
#include<iostream>
struct Node
{
int data;
Node* next;
};
class list1
{
public:
list1();
Node* head;
void insert(int);
void print();
};
list1::list1()
{
head=NULL;
}
void list1::insert(int a)
{
Node* newnode=new Node;
newnode->data=a;
newnode->next=head;
head=newnode;
}
void list1::print()
{
Node* dummy=head;
while(dummy)
{
std::cout<<dummy->data<<std::endl;
dummy=dummy->next;
}
}
int main()
{
list1 first;
first.insert(1);
first.insert(2);
first.insert(4);
first.insert(9);
list1 second;
Node* head2=new Node;
head2=first.head;
second.head=head2;
delete head2;
second.print();
return 0;
}
你會做得很好谷歌**「C++未定義的行爲」** – WhozCraig 2013-03-27 03:08:39