gpt4 book ai didi

c++ - 在复制构造函数双向链表中没有得到头节点和尾节点的正确地址

转载 作者:太空宇宙 更新时间:2023-11-04 14:10:25 24 4
gpt4 key购买 nike

复制构造函数:

 // Copy constructor.  Copies another list.

CRevList(const CRevList &b)
{
cout << "Copy" << endl;

const Node *Start = b.Begin();

const Node *End = b.End();

cout << "Start; " << Start << endl;

cout << "End; " << End << endl;

cout << "b.Begin() : " << b.Begin() << endl;
cout << "b.End() : " << b.End() << endl;
T temp_data;

for(;;){
cout << "Start->data() loop: " << Start->Data() << endl;

temp_data = Start->Data();

PushBack(temp_data);


if(Start == End)
break;

Start = Start->m_next;


}

调用 End 以获取指向尾节点的指针(Begin() 相同):

const Node *End() const {}

Node *End() {
cout << "m_tail " << m_tail << endl;
return m_tail;
}

抱歉代码量太大。我就是想不通我哪里出错了

编辑:好的,这是一个最小的完整示例

司机

using namespace std;

#include <iostream>
#include "RevList.h"

int main(){

CRevList<int> List;
List.PushBack(7);
List.PushBack(300);
cout << "End Ref: " << List.End() << endl;
cout << "begin ref: " << List.Begin() << endl;
cout << List.End() << endl;

CRevList<int> New_list(List);

cout << "End Ref: " << New_list.End() << endl;
cout << "begin ref: " << New_list.Begin() << endl;



}

双向链表的实现:

template<class T> class CRevList
{

public:
//constructor stuff doesn't matter... ;

class Node
{
public:
friend class CRevList;

Node() {m_next = 0; m_prev = 0;}
Node(const T &t) {m_payload = t; m_next = 0; m_prev = 0;}

T Data() {return m_payload;}
const T Data() const {return m_payload;}

private:
Node *m_next;
Node *m_prev;
T m_payload;
};

//Push Back ////////////////////////////////////////////////
void PushBack(const T &t) {
Node * Temp = new Node(t);


if(IsEmpty()){
cout << "is Empty" << endl;
m_head = Temp;

m_tail = Temp;

}
else{
Node * Curr = m_tail;

Curr->m_next = Temp;

Temp->m_prev = Curr;

m_tail = Temp;


}

size += 1;

}


//Get a pointer to the first node in the list
const Node *Begin() const {}
Node *Begin() {
cout << "m_head " << m_head << endl;
return m_head;
}


//get a pointer to the last node in the list
const Node *End() const {}

Node *End() {
cout << "m_tail " << m_tail << endl;
return m_tail;
}

private:


Node *m_head, *m_tail; // Head node
unsigned size;



};

};

最后从驱动输出

m_tail 0x2068030
End Ref: 0x2068030
m_head 0x2068010
begin ref: 0x2068010
m_tail 0x2068030
0x2068030
Copy
Start; 0x7fff7745d240
End; 0x7fff7745d240
b.Begin() : 0x7fff7745d240
b.End() : 0x7fff7745d240
Start->data() loop: 2
Segmentation fault //don't care about this right now

最佳答案

您忘记初始化 size

关于c++ - 在复制构造函数双向链表中没有得到头节点和尾节点的正确地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14736733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com