到底是什么导致我的节点 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 范围内的元素有效)或构造函数中的循环以将实际节点设置到向量中。
目前我刚开始为我的树创建节点。我的想法是简单地创建这样的东西:
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 范围内的元素有效)或构造函数中的循环以将实际节点设置到向量中。