对“std::vector<int, std::allocator<int>>”类型空指针的引用绑定

Posted

技术标签:

【中文标题】对“std::vector<int, std::allocator<int>>”类型空指针的引用绑定【英文标题】:Reference binding to null pointer of type "std::vector<int, std::allocator<int>>" 【发布时间】:2021-05-31 15:30:36 【问题描述】:

您好,我这里有这段代码:

class Node 
public:
   int val;
   vector<Node*> children;

   Node() 

   Node(int _val) 
       val = _val;
   

   Node(int _val, vector<Node*> _children) 
       val = _val;
       children = _children;
   
;


class Solution 
public:
   vector<vector<int>> levelOrder(Node* root) 
       vector<vector<int>> output;
       Calculate(root, 0, output);
       return output;
   
private:
   void Calculate(Node* root, int level, vector<vector<int>>& out)
   
       out[level].push_back(root->val);
       for(u_int i = 0; i < root->children.size(); i++)
       
           if(root->children[i]!=nullptr)
               Calculate(root->children[i], level+1, out);
                  
   
;

输入是长度为 n 的 n 叉树。我正在尝试将值写入相应的向量。每个向量都是树的级别,每个向量中都有另一个向量,其中填充了树当前级别的数字。

但是当我运行代码时,我得到了这个错误:引用绑定到类型为“std::vector”的空指针

我对 C++ 有点陌生,所以我不知道如何解决它。我尝试用一​​些逻辑来做它并询问节点是否为空,但这似乎不是问题。

这里有问题:https://leetcode.com/problems/n-ary-tree-level-order-traversal/

感谢您的任何帮助。

【问题讨论】:

请创建minimal reproducible example 并显示您为程序提供的输入。 我不是 100% 输入的样子,但我编辑了帖子,添加了问题的链接及其对输入的解释。这是链接:leetcode.com/problems/n-ary-tree-level-order-traversal 【参考方案1】:
   vector<vector<int>> output;

这声明了一个向量,一个空向量。向量绝对不包含任何内容。它的大小为 0。然后,该向量作为参数传递给函数,其中会发生以下情况:

   out[level].push_back(root->val);

由于此向量完全为空,out[level] 会导致未定义的行为。 [] 运算符,在 C++ 中,必须指定向量中现有元素的索引。例如,使用[4] 时,底层向量必须至少有五个值。

这里,由于向量是空的,没有向量索引是有效的,上面的代码会导致未定义的行为,这可能是你崩溃的原因。

[](带有std::vector)不会为向量创建或添加值。它访问向量中的现有值,您有责任确保[] 运算符存在。

【讨论】:

【参考方案2】:
vector<vector<int>> output;

然后

out[level].push_back ...;

你得到未定义的行为。

如果你使用默认构造函数创建向量,它的大小为零,你不能像这样用括号索引它。首先使用std::vector::resize 将向量调整为所需的大小。您可以反复调整(放大)矢量的大小而不会丢失现有内容。

【讨论】:

以上是关于对“std::vector<int, std::allocator<int>>”类型空指针的引用绑定的主要内容,如果未能解决你的问题,请参考以下文章

运行时错误:引用绑定到“std::vector<int, std::allocator<int> >”类型的空指针 (stl_vector.h)

警告:XXXX 在 YYYY 中具有不同的可见性(默认)和在 ZZZZ 中(隐藏)

逆序对

初一数学教案有序数对

如何对List 进行排序

根据对的第二个值查找对向量的上限