"Warning : No return statement in function returning non-void"是什么意思?



此函数为循环链表创建一个新节点,如下所示:

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

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

定义如下:

Node *newNode(int data)

您的函数应返回 Node 指针。但是,您的实现没有这样的回报。编译器会警告您此问题。先验地,您可以通过以下方式解决问题:

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

注意:这是一个非常严重的问题,您必须修复代码,否则您将遇到未定义的行为。

>Node *newNode(int data)意味着这个函数必须返回一个Node*,但它没有,这会导致未定义的行为。您可能打算在函数末尾添加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;
}

相关内容

  • 没有找到相关文章