【问题标题】: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;

我在这里错过了什么?

请注意,我在同一范围内添加和访问矢量元素。此外,我还知道可能的内存泄漏和清理。我只是想知道为什么上面的代码不起作用

【问题讨论】:

    标签: c++ class pointers vector


    【解决方案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

    【讨论】:

    • 我的错,一定是这样。我明确指定大小的原因是因为我想限制默认分配大小。基本上,我想要一个包含两个元素的空向量,我可以向其中添加两个指针。您认为最好的解决方法是什么?
    猜你喜欢
    • 2021-07-19
    • 2017-01-26
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    相关资源
    最近更新 更多