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 = 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;
}
爲什麼第一個代碼不工作,而第二個代碼工作?
節點x =節點(10); return&x;您正在傳遞基於堆棧的變量的地址,因此行爲將不明確 – Asesh
您的第一個代碼返回一個指向不再存在的對象的指針,當您嘗試使用指針時 – user463035818
在您的第一個代碼中,您正在創建一個Node對象在堆棧和函數退出的時刻,它超出了範圍,因此指向該內存的指針無效。這就是你得到錯誤的原因。 在你的第二個代碼中,Node對象是在Heap上創建的,它是很長的活動對象,指向它的指針將保持有效直到它被delete操作顯式刪除 –