이중 연결 목록에서 데이터를 인쇄하려고하면 C ++ 프로그램이 충돌합니다.

all을 사용하여 이중 연결 목록에서 노드의 데이터를 인쇄하려고 shared_ptr하지만 인쇄 기능을 사용하여 데이터를 출력하면 프로그램이 충돌합니다. 인쇄하려고 할 때 충돌하는 이유를 모르겠습니다. Insert기능에 문제가있을 수 있습니까?

template <typename T>
class Node
{
   private:
      T data;
      shared_ptr<Node<T>> next;
      shared_ptr<Node<T>> prev;

   public:
      Node() { next = NULL; prev = NULL; data = 0; }
      Node(T value) { next = NULL; prev = NULL; data = value; }
      T getData() { return data; }
      shared_ptr<Node<T>> getNext() { return next; }
      shared_ptr<Node<T>> getPrev() { return prev; }

};

template <typename T>
class DoubleLinkedList
{
   private:
      shared_ptr<Node<T>> head;
      shared_ptr<Node<T>> tail;
   public:
      DoubleLinkedList()
      {
         head = NULL;
         tail = NULL;
         total = 100;
         for (int i = 0; i < total; i++)
         {
            Insert(objectgetsinsertedhere);
         }
      }

      void print()
      {
         shared_ptr<Node<T>> temp;
         temp = tail;
         temp = temp->getPrev();
         cout << temp->getData().getName();  // getName() is a getter to get the name of the object
      }


      void Insert(T data)
      {
         T value(data);

         if (head == NULL)
         {
            head = make_shared<Node<T>>(data);
            tail = head;
         }
         else
         {
            shared_ptr<Node<T>> nu = make_shared<Node<T>>(data);
            nu->getPrev() = tail;
            if (head == tail)
               head->getNext() = nu;
            tail->getNext() = nu;
            tail = nu;
         }
      }
};
마티아스 247

의 과제가 Insert원하는 것을 수행하지 않습니다. 이러한 호출 :

nu->getPrev() = tail;
if (head == tail)
    head->getNext() = nu;
tail->getNext() = nu;

모두 다음 및 이전 필드의 내용에 대한 복사본을 반환합니다. 접근 자 (get / set)는 새로운 shared_ptr 객체를 만들고 prev 및 next 필드의 현재 값으로 초기화합니다. 이러한 복사 된 shared_ptrs의 내용을 재 할당 할 때 노드의 상태를 조작하지 않습니다.

따라서 일반 필드 ( prevnext)에서 작업하거나 접근 자의 필드에 대한 참조를 반환하거나 (예 : shared_ptr> & getNext () {return next;}) 필드에 대한 setter 메서드를 추가하고이를 사용해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

연결 목록에 새 노드를 삽입하려고하면 프로그램이 충돌합니다. 왜?

분류에서Dev

C ++의 연결 목록에 새 노드를 추가하는 동안 프로그램이 충돌합니다.

분류에서Dev

이중 연결 목록의 첫 번째 값만 인쇄하고 내 프로그램이 충돌하는 이유

분류에서Dev

"연결 프로그램"을 사용하면 C # WPF 앱이 자동으로 충돌합니다.

분류에서Dev

연결된 목록이있는 C 프로그램이 끝에 충돌

분류에서Dev

char * 배열에서 포인터를 해제 한 후 C 프로그램이 충돌합니다.

분류에서Dev

텍스트 파일에서 단어를 읽고 연결 목록에 추가하려고하면 프로그램이 충돌하고 이유를 모르겠습니다.

분류에서Dev

for 루프에서 2D 배열을 인쇄하면 프로그램이 충돌합니다.

분류에서Dev

카운터가 루프 내에서 사용되면 C ++ 프로그램이 충돌합니다.

분류에서Dev

Neura 서비스에 연결하려고 할 때 앱이 충돌합니다.

분류에서Dev

데이터베이스를로드하려고하면 응용 프로그램이 계속 충돌합니다.

분류에서Dev

목록보기에서 선택한 항목을 변경하려고하면 프로그램이 충돌합니다.

분류에서Dev

.mdb 데이터베이스를 C # 데스크톱 응용 프로그램에 연결해야합니다.

분류에서Dev

변수 filename으로 파일을 열려고하면 c 프로그램이 충돌합니다.

분류에서Dev

Xcode에서 중복 라이브러리를 삭제하려고하면 Xcode가 충돌합니다 ( '라이브러리와 바이너리 연결').

분류에서Dev

C 프로그램이 Seg Fault와 충돌하지만 LLDB에서 완벽하게 작동합니다.

분류에서Dev

.removeStateDidListener를 deinit에 추가하면 응용 프로그램이 충돌합니다.

분류에서Dev

C-연결 목록에 새 데이터를 추가하면 이전 데이터도 변경됩니다.

분류에서Dev

Windows에서 C # tcp 프로토콜 연결. 서버 응용 프로그램이 충돌하면 어떻게됩니까?

분류에서Dev

델파이에서 LdrLoadDll을 연결할 때 응용 프로그램이 충돌합니다.

분류에서Dev

프로그램에서 이름과 성을 인쇄하려고하면 오류가 발생합니다.

분류에서Dev

파일에서 연결 목록을 읽고 데이터를로드합니다.

분류에서Dev

내 C 프로그램을 Arb 라이브러리에 연결하려면 어떻게해야합니까?

분류에서Dev

데이터베이스에 데이터를 삽입하려고하면 앱이 충돌합니다.

분류에서Dev

OSX의 C ++ / Objective-C 응용 프로그램에서 드래그 작업 중 충돌이 발생합니다.

분류에서Dev

C hello world 프로그램이 변수 출력에서 충돌합니다.

분류에서Dev

char arr = "..."; C 프로그램에서 충돌이 발생합니다.

분류에서Dev

내 구조체에서 char * 유형의 요소를 특정 문자열로 설정하려고하면 C 프로그램이 충돌합니까?

분류에서Dev

다음 Android 활동에 버튼을 연결하면 앱이 충돌합니다.

Related 관련 기사

  1. 1

    연결 목록에 새 노드를 삽입하려고하면 프로그램이 충돌합니다. 왜?

  2. 2

    C ++의 연결 목록에 새 노드를 추가하는 동안 프로그램이 충돌합니다.

  3. 3

    이중 연결 목록의 첫 번째 값만 인쇄하고 내 프로그램이 충돌하는 이유

  4. 4

    "연결 프로그램"을 사용하면 C # WPF 앱이 자동으로 충돌합니다.

  5. 5

    연결된 목록이있는 C 프로그램이 끝에 충돌

  6. 6

    char * 배열에서 포인터를 해제 한 후 C 프로그램이 충돌합니다.

  7. 7

    텍스트 파일에서 단어를 읽고 연결 목록에 추가하려고하면 프로그램이 충돌하고 이유를 모르겠습니다.

  8. 8

    for 루프에서 2D 배열을 인쇄하면 프로그램이 충돌합니다.

  9. 9

    카운터가 루프 내에서 사용되면 C ++ 프로그램이 충돌합니다.

  10. 10

    Neura 서비스에 연결하려고 할 때 앱이 충돌합니다.

  11. 11

    데이터베이스를로드하려고하면 응용 프로그램이 계속 충돌합니다.

  12. 12

    목록보기에서 선택한 항목을 변경하려고하면 프로그램이 충돌합니다.

  13. 13

    .mdb 데이터베이스를 C # 데스크톱 응용 프로그램에 연결해야합니다.

  14. 14

    변수 filename으로 파일을 열려고하면 c 프로그램이 충돌합니다.

  15. 15

    Xcode에서 중복 라이브러리를 삭제하려고하면 Xcode가 충돌합니다 ( '라이브러리와 바이너리 연결').

  16. 16

    C 프로그램이 Seg Fault와 충돌하지만 LLDB에서 완벽하게 작동합니다.

  17. 17

    .removeStateDidListener를 deinit에 추가하면 응용 프로그램이 충돌합니다.

  18. 18

    C-연결 목록에 새 데이터를 추가하면 이전 데이터도 변경됩니다.

  19. 19

    Windows에서 C # tcp 프로토콜 연결. 서버 응용 프로그램이 충돌하면 어떻게됩니까?

  20. 20

    델파이에서 LdrLoadDll을 연결할 때 응용 프로그램이 충돌합니다.

  21. 21

    프로그램에서 이름과 성을 인쇄하려고하면 오류가 발생합니다.

  22. 22

    파일에서 연결 목록을 읽고 데이터를로드합니다.

  23. 23

    내 C 프로그램을 Arb 라이브러리에 연결하려면 어떻게해야합니까?

  24. 24

    데이터베이스에 데이터를 삽입하려고하면 앱이 충돌합니다.

  25. 25

    OSX의 C ++ / Objective-C 응용 프로그램에서 드래그 작업 중 충돌이 발생합니다.

  26. 26

    C hello world 프로그램이 변수 출력에서 충돌합니다.

  27. 27

    char arr = "..."; C 프로그램에서 충돌이 발생합니다.

  28. 28

    내 구조체에서 char * 유형의 요소를 특정 문자열로 설정하려고하면 C 프로그램이 충돌합니까?

  29. 29

    다음 Android 활동에 버튼을 연결하면 앱이 충돌합니다.

뜨겁다태그

보관