问题发生在我使用运算符+重载+运算符以将2个列表加在一起的情况下(如果长度不同,问题会在第一个列表结束时结束)。在我编写了delete_position()之后的所有内容,上述功能和main()由教授提供。
答案 0 :(得分:3)
我看到的一个明显错误是函数operator+(List& a, List& b)
:
Node* tempA = new Node;
Node* tempB = new Node;
tempA = &a.getHead();
tempB = &b.getHead();
您首先要使用tempA
向tempB
和new
分配内存,然后再将它们分配给其他地址。
这将导致:
delete
使用new
分配的内存。 a.getHead()
和b.getHead()
获得的都是暂时的。 事实上,像GCC和Clang这样的编译器不会编译该文件,并且会发出错误消息,说明如下:
error: taking the address of a temporary object of type 'Node' [-Waddress-of-temporary]
tempB = &b.getHead();
就像@PaulMcKenzie指出的那样,请看一下您的副本构造函数。由于您的类具有指针,因此您应注意复制数据的方式。 阅读此question及其答案,以了解实现copy *函数的正确方法。