我正在实现一个为循环链表创建新节点的函数,如图所示:
Node *newNode(int data)
{
Node *temp = new Node;
temp->next = temp;
temp->data = data;
}
但是,我从编译器收到警告。我知道它应该有一个返回值,但不确定实现它的正确方法。对此,我将不胜感激。 谢谢!
答案 0 :(得分:1)
由
定义Node *newNode(int data)
您的函数应该返回一个Node指针。但是,您的实现没有这种回报。编译器会警告您有关此问题。您可以通过以下方式先解决问题:
Node *newNode(int data)
{
Node *temp = new Node;
temp->next = temp;
temp->data = data;
return temp;
}
注意:,这是一个非常严重的问题,必须修复您的代码,否则会有不确定的行为。
答案 1 :(得分:0)
Node *newNode(int data)
表示此函数必须返回Node*
,而实际上并没有,这会导致undefined behavior。您可能想做的是在函数末尾添加return temp
。否则,您还是会泄漏内存。
修复:
Node *newNode(int data)
{
Node *temp = new Node;
temp->next = temp;
temp->data = data;
return temp;
}
要真正修复此功能,请考虑使用智能指针,以便有人明确地拥有堆分配的对象:
#include <memory>
struct Node {
Node* next;
int data;
};
[[nodiscard]] auto newNode(int const data) {
auto temp = std::make_unique<Node>();
temp->next = temp.get();
temp->data = data;
return temp;
}