gpt4 book ai didi

c++ - 在 C++11 中使用异步的分段​​错误(核心转储)

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:56 24 4
gpt4 key购买 nike

我创建了一个将现有树对象转换为字符串的函数。字符串格式为

parent ( child1 ) ( child2 ( childOfChild2 ) )

程序正确输出了字符串,做了一些其他的工作,但是在

Segmentation fault (core dumped)

这是函数(getTree(this->root) 输出整棵树):

template <typename T>
string Tree<T>::getTree(const Node<T>& node) {
if (node.isLeaf()){
return to_string(node.value);
}

vector<future<string>> results; //each element represents a subtree connected to "node"
for (auto child:node.children){
results.push_back(move(async(&Tree<T>::getTree,this,ref(*child))));
}

string children("");
for (auto& result:results){
children+=string(" (") + result.get()+ string(") "); //this creates Segmentation fault, but the output is correct
//children+=string(""); //this does not create Segmentation fault
//children+=string("foo"); //this creates Segmentation fault
}

return to_string(node.value)+children;
}

关于变量的一些信息:

vector<shared_ptr<Node>> children;

如果您需要更多信息,请告知。完整来源是tree.cpptree.h .

最佳答案

迭代器中的比较函数不起作用 - 您还需要涵盖两个容器都为空的情况,即

bool operator!= (const Iter& other) const {
if (this->queueToIter.empty()&& other.queueToIter.empty()) return false;
if (this->queueToIter.empty()&&! other.queueToIter.empty()) return true;
if (!this->queueToIter.empty()&& other.queueToIter.empty()) return true;
return (this->queueToIter.front())!=(other.queueToIter.front());
};

关于c++ - 在 C++11 中使用异步的分段​​错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13078942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com