【发布时间】:2021-12-08 02:34:37
【问题描述】:
美好的一天,我最近一直在尝试迁移到 c++ 以加速我的一些应用程序。可能是由于我的背景缺乏,我犯了一个如此愚蠢的错误,但是,我在尝试使用嵌套循环运行它时得到interrupted by signal 11: SIGSEGV:
mongocxx::cursor cursor = coll.find({});
for(auto doc : cursor) {
std::cout << "TEST FIRST" << bsoncxx::to_json(doc) << "\n";
for (auto doc2 : cursor) {
std::cout << "FIRST: " << bsoncxx::to_json(doc) << "\n";
std::cout << "SECOND: " << bsoncxx::to_json(doc2) << "\n";
} }
我到底做错了什么,为什么?
【问题讨论】:
-
您发布的代码缺少
"。它无法编译,不是导致 SIGSEGV 的代码。请发帖minimal reproducible example -
我对@987654325@ 了解不多,但看起来您可以使用
const&而不是复制:for(auto const& doc : cursor)和for (auto const& doc2 : cursor)- 等一下 - 你循环使用相同的@ 987654329@?这大概就是问题所在。内循环不应该结束doc吗?for (auto const& doc2 : doc) -
您是在第一个还是第二个 cout 中获得
SIGSEGV? -
@463035818_is_not_a_number 我已经编辑过了,虽然这只是代码示例中的一个错字。如果我忘记添加“,编译器会给我一个不同的错误。无论如何,谢谢你的注意
-
@Anna-Lischen 我希望我能更多地了解
mongcxx以提供正确的答案。我对使用auto的引用 (&) 的建议是,然后您将引用cursor迭代器指向的对象,而不是 复制 该对象(这就是auto没有&就可以了)。关于cursor::begin()的有趣说明:“如果多次调用begin(),则返回的cursor::iterator指向下一个剩余结果,而不是最初调用begin()的结果。 "
标签: c++ nested-loops c++20 mongo-cxx-driver