繁体   English   中英

C ++函数输出返回后发生更改

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM