创建链表时使用'new'



我一直在尝试用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; 
}
}

上面的代码运行良好。但是,如果我用注释行替换循环中的代码,那么它就会失败。我不知道为什么。

我还被告知,在使用new时,您需要执行delete。如果不能避免使用新的,那么如何执行delete

Node temp( v )将创建一个作用域为for循环的局部变量。在每次迭代中,都会创建局部变量,并在迭代结束时销毁。

您正在存储一个指向局部变量的指针,这是未定义的行为。可能发生的情况是,在每次迭代中,局部变量都是在旧变量的顶部创建的(这也取决于实现(。

由于您希望节点的寿命超过迭代的生存期,因此需要通过new在堆上分配节点

相关内容

  • 没有找到相关文章

最新更新