到底是什么导致我的节点 class 的向量包含 class 的指针导致分段错误?

What exactly is causing my node class with a vector housing the pointers of the class to cause segmentation faults?

目前我刚开始为我的树创建节点。我的想法是简单地创建这样的东西:

class Node
{ 
private:
   int key_;
   std::vector< Node * > child_;
public:
   Node(int key)
      : key_(key), child_()
   {
   }
   Node * get_child(int key) const
   {
       return child_[key];
   }
};

没什么特别的,对吧?

在主体内部,我调用了所有的头文件并像这样初始化了整个东西

Node child(0);

现在让我感到沮丧的是,当我尝试简单地检查节点中的所有内容是否都已真正初始化时。我主要做的就是这个。

std::cout << node.get_child(0) << std::endl;

出现可怕的分段错误,这意味着向量的内存分配已关闭。我的问题是,如果这确实发生了什么,那么到目前为止我的代码中有什么问题?如果不是,请澄清我的 class 模板中到底有什么错误。

Node 的构造函数中,您设置了内部键值,并构造了一个 向量。您没有显示任何向向量添加任何内容的代码,并且尝试访问空向量的元素 0 会导致未定义的行为(在您的情况下是崩溃)。

您可能需要类似 child(1)(在向量中创建一个节点)、child(key + 1, nullptr)(创建空节点指针,以便 0..k 范围内的元素有效)或构造函数中的循环以将实际节点设置到向量中。