gpt4 book ai didi

c++ - 复制构造函数遍历链表。执行

转载 作者:行者123 更新时间:2023-11-28 02:37:49 27 4
gpt4 key购买 nike

我试图在我的复制构造函数中复制整个链表,但是我继续获得访问权限为什么我的复制结构不能正常工作?错误:

Unhandled exception at 0x00AE506C in program.exe: 0xC0000005: Access violation reading location 0x00000004.

拷贝构造函数

NodeSLList::NodeSLList(NodeSLList & list)
{
head = list.head;
IntNode *tmp = head;
cout << "copy constructor called" << endl;

int size;
size = list.GetSize();

for (int i = 1; i <= size; i++)
{
tmp->data= list.RetrieveNode(i).data;
tmp->next = list.RetrieveNode(i).next;
tmp = tmp->next;
}
}

主要

NodeSLList list2 (list1);
cout << "cout << list2 " << endl;
cout << list2 << endl;

错误发生在cout << list2 << endl;因为 cop 构造函数没有正确复制链表。

最佳答案

一个问题是:

head = list.head;
IntNode *tmp = head;

你不应该复制指针值。您将得到两个指向同一内存的指针。两个对象应该有不同的 head 值。

如果您有一个将节点添加到链表的函数,那么您可以在复制构造函数中使用它来避免这种情况。这是一个例子:

NodeSLList::NodeSLList(const NodeSLList & list) : head(0)
{
int size;
size = list.GetSize();
for (int i = 1; i <= size; i++)
addData(list.RetrieveNode(i).data);
}

这需要你有一个类似于 addData 的函数,它使用传入的数据添加一个新节点。请注意,这会测试你的 addData 函数以确保它正常工作.复制构造函数只是在循环中调用它。

最后,您还需要一个赋值运算符来配合复制构造函数(以及析构函数)。赋值运算符可以使用复制构造函数和析构函数作为辅助函数来编写(即 copy/swap 习惯用法)。

关于c++ - 复制构造函数遍历链表。执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26942101/

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