문제

C ++로 프로그램을 작성하여 각 노드에서 단일 문자를 보유하는 이중 연결 목록을 구현합니다. Append 기능을 통해 문자를 삽입하고 있습니다.

doubly_linked_list adam;
adam.append('a');

이 기능은 다음과 같이 구현됩니다.

//Append node
    node* append(const item c){

        //If the list is not empty...
        if(length){
            //maintain pointers to end nodes
            node* old_last_node = last;
            node* new_last_node = new node;

            //re-assign the double link and exit link
            old_last_node->next = new_last_node;
            new_last_node->back = old_last_node;
            new_last_node->next = NULL;

            //re-assign the last pointer
            last = new_last_node;
        }
        //If this is the first node
        else{
            //assign first and last to the new node
            last = first = new node;

            //assign nulls to the pointers on new node
            first->next = first->back = NULL;
        }

        //increase length and exit
        ++length;
        return last;
    }

그러나 C ++가 문자를 처리하는 방식과 관련하여 문제가 있다고 생각합니다. 내 목록을 인쇄 할 때, 어떻게 든 내 목록에 추가 된 캐릭터를 인쇄하지 않습니다. 이것이 제가 인쇄하는 데 사용하는 것입니다.

//Friendly output function
    friend std::ostream& operator << (std::ostream& out_s, const doubly_linked_list& source_list){
        //create iteration node pointer
        node* traverse_position = source_list.first;

        //iterate through, reading from start
        for(int i = 1; i <= source_list.length; ++i){
            //print the character
            out_s << (traverse_position->data);
            traverse_position = traverse_position->next;
        }

        //return the output stream
        return out_s;
    }

인쇄 할 때 쓰레기를 얻습니다. 그것은 내가 내 목록에 결코 추가 된 캐릭터를 인쇄합니다. 당신은 메모리 어딘가에서 나오는 캐릭터 만 알고 있습니다. 이것을 일으킬 수있는 것은 무엇입니까?

도움이 되었습니까?

해결책

값을 어디에 할당하고 있습니까? c 에서 append() 기능? 나는 당신이 이중-연결된 부분에 너무 많이 집중했을 수도 있고 저장 데이터 부분에는 충분하지 않을까 걱정됩니다. :)

다른 팁

다른 사람들이 이미 언급했듯이, 당신은 당신이 부여했던 캐릭터를 저장하는 것을 잊었습니다. 합리적인 실수입니다. 미래에 피하기 위해 컴파일러가 도움을 줄 수 있습니다.

대부분의 컴파일러가 제공합니다 경고 기술적으로 괜찮지 만 아마도 당신이 정말로하고 싶은 것이 아닐 것입니다. 귀하의 경우, 당신은 매개 변수를 선언했습니다 c, 그러나 당신은 그것을 사용하지 않았습니다. 경고가 활성화되면 컴파일러가 그 사실을 알아 차리고 사용하지 않았다고 말했습니다. 그것은 아마도 당신이 그 기능을 작성하지 않았다는 것을 알게되었을 것입니다.

일반적인 경고를 가능하게하는 GCC의 옵션은 다음과 같습니다 -Wall. ( "경고", "모두"를위한 "W"입니다. 벽과 관련이 없습니다. 그러나 실제로는 아닙니다. 모두 경고도 예를 들어 :

g++ -Wall list-program.cpp

다른 컴파일러에는 비슷한 옵션이 있습니다. 자세한 내용은 컴파일러의 문서를 확인하십시오.

Append Method에서 실제로 새 노드에 항목을 배치하는 곳은 없습니다. 인쇄 할 때는 해당 메모리 위치 (일부 임의의 값)에 어떤 값이 발생하는지 인쇄합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top