无法取消引用插入到向量中的类对象指针
Posted
技术标签:
【中文标题】无法取消引用插入到向量中的类对象指针【英文标题】:Cannot Dereference Class Object Pointers Inserted Into a Vector 【发布时间】:2014-06-04 17:35:26 【问题描述】:struct Tree_Node
typedef int node_value_type;
Tree_Node(node_value_type key) : value(key)
public:
node_value_type value = 0;
Tree_Node* right = nullptr;
Tree_Node* left = nullptr;
;
在将指向上述类的指针插入向量后,尝试弹出元素并取消引用它会给我在 Visual C++ 中的“访问冲突读取位置”异常。
vector<Tree_Node*> node_list(2);
Tree_Node* node1 = new Tree_Node(5);
node_list.push_back(node1);
cout << node_list.front()->value;
但是,以下工作正常:
Tree_Node* node2 = node1;
cout << node2->value << endl;
我在这里错过了什么?
请注意,我在同一范围内添加和访问矢量元素。此外,我还知道可能的内存泄漏和清理。我只是想知道为什么上面的代码不起作用
【问题讨论】:
【参考方案1】:vector<Tree_Node*> node_list(2);
它创建一个带有两个空指针的向量。
node_list.push_back(node1);
它插入第三个元素
cout << node_list.front()->value;
它尝试访问第一个,它是一个空指针
要保留空间而不插入元素,请使用:
vector<Tree_Node*> node_list;
node_list.reserve(2);
但我几乎可以肯定默认 ctor 会为超过 2 个元素保留位置。
您还可以更新两个已分配的元素:
vector<Tree_Node*> node_list(2);
node_list[0] = node1;
node_list[1] = node2;
如果您想确保您的容器仅包含两个元素,请使用 std::pair
或(如果您可以使用 C++11)std::array
。
【讨论】:
我的错,一定是这样。我明确指定大小的原因是因为我想限制默认分配大小。基本上,我想要一个包含两个元素的空向量,我可以向其中添加两个指针。您认为最好的解决方法是什么?以上是关于无法取消引用插入到向量中的类对象指针的主要内容,如果未能解决你的问题,请参考以下文章