复制构造函数双链接列表中的头节点和尾节点的地址不正确
Not getting correct address to head and tail nodes in copy constructor doubly linked list
复制构造函数:
// 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;
};
};
AND最终从驱动器输出
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
。
相关文章:
- 反向给定链表中的K节点
- 将数组的地址分配给变量并删除
- 空基优化子对象的地址
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Boost Graph Library,修复节点大小
- C++中是否有一个函数可以为您获取指向该节点的所有指针的地址空间
- 如何在NS3中设置节点的IP地址和数据?
- 在C++中设置节点的内存地址
- C++:尝试将新节点添加到链表会产生"线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x0)"错误
- 不同节点的相同地址
- 存储链接列表节点地址
- 通过池分配器中的内存地址访问可用列表节点时出现问题
- 为节点分配指针地址
- 获取类型为"节点"的临时对象的地址
- 正在访问指针地址处的节点
- 如何返回节点的地址
- 在第三次调用中,当地址因本地作用域而被销毁时,temp2->next 如何能够访问第二个节点的地址?
- 复制构造函数双链接列表中的头节点和尾节点的地址不正确
- 给定链表中的节点地址,获取节点的地址