创建链表时使用 'new'
Using 'new' when creating a linked list
我一直在尝试用 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
。如果无法避免使用 new 那么如何执行 delete
?
说 Node temp( v )
将创建一个作用域为 for
循环的局部变量。每次迭代都会创建局部变量,并在迭代结束时销毁。
您正在存储指向局部变量的指针,这是未定义的行为。可能发生的情况是,在每次迭代中,局部变量都是在旧变量之上创建的(这也取决于实现)。
因为您希望节点的寿命超过迭代的生命周期,您需要通过 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
。如果无法避免使用 new 那么如何执行 delete
?
说 Node temp( v )
将创建一个作用域为 for
循环的局部变量。每次迭代都会创建局部变量,并在迭代结束时销毁。
您正在存储指向局部变量的指针,这是未定义的行为。可能发生的情况是,在每次迭代中,局部变量都是在旧变量之上创建的(这也取决于实现)。
因为您希望节点的寿命超过迭代的生命周期,您需要通过 new