2012-03-09 5 views
1

고유 한 연결 목록을 만드는 중입니다. 다른 연결된 목록의 머리와 꼬리를 가리키는 두 node_iterators를 사용하는 연결된 목록의 오버로드 된 생성자를 만들려고합니다.잘못된 포인터의 오류를주는 노드 반복자가있는 링크 된 목록 생성자

오버로드 목록 생성자 :

template <typename T> 
list<T>::list(node_iterator<T> front, node_iterator<T> back) 
{ 
    unsigned temp; 
    this->head = front.get_current(); 
    while(front != back) 
    { 
     ++temp; 
     ++front; 
    } 
    this->tail = back.get_current(); 
    this->used = temp; 

} 

head 위 및 tail 목록 내 노드 node<T>* 있습니다. 내가 작성한 frontback 개의 node_iterators가 있습니다. get_current() 메서드는 node_iterator 클래스가 가리키는 현재 노드에 node<T>*을 반환합니다. 내 node_iterator 클래스에 과부하 된 ++!= 연산자를 테스트했으며 작동합니다. 그러나 때 나는 다음과 같은 오류가 위의 생성자 내 목록 클래스를 만들려고 :

나는이 문제를 해결하거나 더 나은 방식으로 위를 할 수있는 방법에 대한 팁

*** glibc detected *** ./a.out: munmap_chunk(): invalid pointer: 0xbf91b1a4 ***

? 더 많이 볼 필요가 있으면 알려주세요.

+0

다른 목록의 머리와 꼬리를 가져 오는 생성자가 필요한 이유는 무엇입니까? 이러한 값은 클래스의 private 멤버 여야하며 호출 범위에서 액세스 할 수 없어야합니다. –

+1

처음에는 'temp'가 초기화되지 않습니다. – jogojapan

+0

스트레이트 업 디버그 세션은 여기에 주어진 추측 작업보다 더 많이 알려줄 것이라고 생각합니다. 디버거를 밟았습니까? 충돌이 일어나는 라인은 무엇입니까? 제쳐두고, 'temp'는 초기화되지 않습니다 (적어도 크라이처가 아닙니다). –

답변

1

temp은 초기화되지 않습니다. 나는 그것이 누락 = 0의 결과로

unsigned temp = 0; 

을 했어야 같아요 this->used는 어떤 임의의 가치 끝납니다. 추후에 코드에서 (실제로 생성자가 아님) 추측하면 충돌이 발생합니다.

+0

이것은 많은 문제 중 하나였습니다. 그것을 잡아 주셔서 감사합니다. –