我一直在嘗試用 C 創建一個鏈表。我試圖new在創建時避免使用關鍵字,但它似乎不起作用
// Linked lists
struct Node
{
int value;
Node *next;
Node( int val ) : value( val ), next(nullptr) {};
};
int main()
{
vector<int> vec = { 2,5,7,1,4,7 };
//insertian
Node head(0); // we need to use a pointer
Node* ptr = &head;
for ( auto v : vec)
{
Node* temp = new Node( v ); // Node temp( v );
ptr->next = temp; //ptr->next = &temp;
ptr = ptr->next;
}
}
上面的代碼作業正常。但是如果我用注釋行替換回圈內的代碼,那么它就會失敗。我不知道為什么。
我還被告知您需要delete在使用new. 如果無法避免使用新的,那么如何delete執行?
uj5u.com熱心網友回復:
SayingNode temp( v )將創建一個作用域為for回圈的區域變數。每次迭代都會創建區域變數,并在迭代結束時銷毀。
您正在存盤一個指向區域變數的指標,這是未定義的行為。可能發生的事情是在每次迭代時在舊變數的頂部創建區域變數(這也取決于實作)。
由于您希望節點比迭代的生命周期更長,您需要通過以下方式在堆上分配節點 new
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/403177.html
標籤:
