C ++找不到错误,+运算符重载将2个链接列表加在一起

时间:2018-11-30 04:08:51

标签: c++

问题发生在我使用运算符+重载+运算符以将2个列表加在一起的情况下(如果长度不同,问题会在第一个列表结束时结束)。在我编写了delete_position()之后的所有内容,上述功能和main()由教授提供。

1 个答案:

答案 0 :(得分:3)

我看到的一个明显错误是函数operator+(List& a, List& b)

Node* tempA = new Node;
Node* tempB = new Node;
tempA = &a.getHead();
tempB = &b.getHead();

您首先要使用tempAtempBnew分配内存,然后再将它们分配给其他地址。

这将导致:

  • 内存泄漏,因为您将无法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 *函数的正确方法。