わかった。私は単純なリンクリストコードで支払いをしています。
ヘッド ノードをパブリックとして保持します。次に、メイン プログラムで最初のリスト (first) のヘッド ノードを格納するポインター (head2) を宣言します。second という 2 番目のリストを宣言し、head2 を 2 番目のリストのヘッド ノードとして割り当てます。次に、head2 を削除します。次に、"second" (ヘッド ノードが削除された) のメンバーにアクセスし、それらを出力します。セグメンテーション違反が予想されました。しかし、それは機能し、ヘッドノードのデータに対してのみ 0 を出力します。私が困惑しているのは、ヘッド ノードが削除された場合、ヘッド ノードの次のポインターがメモリ内に残っていることです。(これは、リストをトラバースするために print によってアクセスされます。Ubuntu で g++ 4.6.1 を使用しています。コードは次のとおりです。
#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;
}