我试图从函数返回指向结构的指针。我编写了以下代码,但它没有工作,并给出了分段错误。
#include <iostream>
using namespace std;
struct Node {
int val;
Node* next;
Node(int x): val(x), next(NULL) {};
};
Node* f(int a){
Node x = Node(10);
return &x;
}
int main(){
Node *x = f(10);
cout << x->val << "\n";
return 0;
}
以下代码正常工作。
#include <iostream>
using namespace std;
struct Node {
int val;
Node* next;
Node(int x): val(x), next(NULL) {};
};
Node* f(int a){
Node *x = new Node(10);
return x;
}
int main(){
Node *x = f(10);
cout << x->val << "\n";
return 0;
}
为什么第一个代码不起作用而第二个代码正在工作?
答案 0 :(得分:1)
除非动态分配或静态变量,否则永远不应返回对局部变量的引用,因为当函数返回时,它将被销毁,然后您将尝试访问您无权访问的区域。