【发布时间】:2019-09-11 15:24:09
【问题描述】:
这是我的linked list 结构代码。我想使用一个向量来初始化 TreeNode。但是在构造函数中,ptr->next = tem 有错误Exception thrown: write access violation.
ptr was 0xCDCDCDCD. 有人知道原因以及如何更正吗?
#include<iostream>
#include<vector>
using namespace std;
struct ListNode {
int val = 0;
ListNode* next = NULL;
ListNode(int val) : val(val){};
ListNode(vector<int> vec) {
if (vec.empty())
return;
val = vec[0];
ListNode* ptr = this;
for (int i = 1; i < vec.size();i++)
{
ptr->next = new ListNode(vec[i]);
ptr = ptr->next;
}
}
};
【问题讨论】:
-
您有什么理由不使用
std::list而不是您自己的? -
@user6703592 这种方法没有意义。节点不能由向量初始化。它是一个可以由向量初始化的列表。
-
看来您从根本上误解了
new和delete。如果您delete tem;则tem以及指向同一对象的所有其他指针都将失效。delete不会“释放”指向对象的指针(指针不是任何类型的引用计数句柄)它会删除指针指向的实际对象。 -
如果你有向量,为什么还要使用链表呢?
-
该代码在我看来是随机的。你能向橡皮鸭解释它的每一行应该做什么以及为什么会在那里吗?
标签: c++ vector constructor linked-list singly-linked-list