![](/img/trans.png)
[英]Why Output of c++ code changes when I change the function return type?
[英]C++ Function output changes after return
我试图从图的DFS遍历中获取树的向量,但是从函数返回结果后结果会更改。
这是Tree类:
template <typename T>
class Tree
{
public:
T v; // value of current node
// List of subtrees
std::list<Tree<T>*> children;
// Pointer to parent
Tree<T> *parent;
Tree(T v) {
this->v = v;
}
}
这是功能的相关部分
for (int i = 0; i < V; ++i)
trees.push_back(Tree<T>(info[i]));
int parent, node;
std::vector<int> roots;
for (int i = 0; i < V; ++i) {
parent = parents[i];
node = path[i];
if (parent != -1) {
trees[parent].children.push_back(&trees[node]);
trees[node].parent = &trees[parent];
}
else {
roots.push_back(node);
}
}
for(int node_i : roots)
res.push_back(trees[node]);
return res;
变量声明如下:
template <typename T>
std::vector<Tree<T>> DFSTree(std::vector<T> &info) {
std::vector<Tree<T>> res;
std::vector<int> path;
std::vector<int> parents;
std::vector<Tree<T>> trees;
结果向量的子代中的Tree没有任何子集。 抱歉,这是一个基本问题,但我在任何地方都找不到答案。 感谢您的答复
在Tree
类中有指针。 当您使用res.push_back(trees[node])
复制树节点时,子指针和父指针仍指向trees
,而不是res
。 当函数返回时, trees
超出范围,其内存被释放, res
的指针指向已删除的内存。
解决方法是重新考虑您的设计,以免使用指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.