2014-03-03 5 views
1

내 코드에 문제가 있습니다. 호출 연결 목록이 값으로 "업데이트"되지 않거나 저장되지 않았거나 무언가가 아닙니다. 도와 줘서 고마워. 고마워.연결된 목록 앞에 삽입

template <class T> 
void LinkedList<T>::insert_front(const T& x) 
{ 
LinkedList* p = this; 
LinkedList* tmp = new LinkedList(x,p); 
p = tmp; 
cout<<p->m_data<<endl; 
cout<<tmp->m_data<<endl; 

호출 기능은

//TEST : Inserting 10 numbers to a 
cout << endl << "TEST : Inserting 10 numbers to A" << endl; 
for (int k=0; k<10; k++){ 
A.insert_front(k+1); 
} 
cout << A << endl; 
cout << "Size of a = " << A.size() << endl; 

내가 TMP 데이터 값과 p의 데이터 값 값은 코드에 가서 각 호출 입니다 1122334455667788991010 의 출력을 얻을 수 있으며, 그들은이다 나는 인쇄 할 때 바로 값을 반환합니다. 아무것도 빈 목록으로 표시되지 않습니다. 고마워, 나는 여기 새로 왔지만 커뮤니티를 사랑해.

+1

링크 된 목록의 개념에 결함이 있습니다. 연결된 목록에는 head * node *를 가리키는 head * pointer *가 있습니다. 작성한대로 새 노드를 할당하고 '다음'을 'this'로 지정하면 즉시 할당이 유출됩니다. 결국에는 누수 된 메모리와 헤드 노드가 아무 것도 가리 키지 않고 무엇부터 시작해야 하는가 : 불확실한 값과 어디에도없는 '다음'포인터가 있습니다. – WhozCraig

답변

1

링크 된 목록 및 방법의 디자인이 잘못되었습니다.

메서드에서 로컬 변수 p를 정의하고 tmp에 할당했습니다. 메소드를 종료하면이 로컬 변수가 소멸됩니다. 따라서 목록 자체에는 아무 것도 발생하지 않았습니다. 데이터 멤버가 변경되지 않았습니다. 또한 메모리 누수가 있습니다.

template <class T> 
void LinkedList<T>::insert_front(const T& x) 
{ 
LinkedList* p = this; 
LinkedList* tmp = new LinkedList(x,p); 
p = tmp; 
cout<<p->m_data<<endl; 
cout<<tmp->m_data<<endl; 

클래스를 두 개의 클래스로 나눠야합니다. 첫 번째 노드는 목록의 노드를 정의하고 두 번째 노드는 목록과 함께 작업을 제어하고 데이터 멤버로 목록의 헤드를 포함합니다.