“警告:函数返回无void的无返回语句”是什么意思?

时间:2019-12-08 07:34:07

标签: c++ function pointers nodes

我正在实现一个为循环链表创建新节点的函数,如图所示:

Node *newNode(int data) 
{
  Node *temp = new Node;
  temp->next = temp;
  temp->data = data;
}

但是,我从编译器收到警告。我知道它应该有一个返回值,但不确定实现它的正确方法。对此,我将不胜感激。 谢谢!

2 个答案:

答案 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;
}