gpt4 book ai didi

c++ - Boost:boost::slot<>::~slot 崩溃的原因可能是什么?

转载 作者:行者123 更新时间:2023-11-28 08:31:28 28 4
gpt4 key购买 nike

我遇到了这样的崩溃:

#0  0x90b05955 in __gnu_debug::_Safe_iterator_base::_M_detach
#1 0x90b059ce in __gnu_debug::_Safe_iterator_base::_M_attach
#2 0x90b05afa in __gnu_debug::_Safe_sequence_base::_M_detach_all
#3 0x000bc54f in __gnu_debug::_Safe_sequence_base::~_Safe_sequence_base at safe_base.h:170
#4 0x000aac05 in __gnu_debug::_Safe_sequence<__gnu_debug_def::vector<boost::signals::trackable const*, std::allocator<boost::signals::trackable const*> > >::~_Safe_sequence at safe_sequence.h:97
#5 0x000ac9c1 in __gnu_debug_def::vector<boost::signals::trackable const*, std::allocator<boost::signals::trackable const*> >::~vector at vector:95
#6 0x000acf65 in boost::signals::detail::slot_base::data_t::~data_t at slot.hpp:32
#7 0x000acf8f in boost::checked_delete<boost::signals::detail::slot_base::data_t> at checked_delete.hpp:34
#8 0x000b081e in boost::detail::sp_counted_impl_p<boost::signals::detail::slot_base::data_t>::dispose at sp_counted_impl.hpp:78
#9 0x0000a016 in boost::detail::sp_counted_base::release at sp_counted_base_gcc_x86.hpp:145
#10 0x0000a046 in boost::detail::shared_count::~shared_count at shared_count.hpp:217
#11 0x000a9fb0 in boost::shared_ptr<boost::signals::detail::slot_base::data_t>::~shared_ptr at shared_ptr.hpp:169
#12 0x000aa459 in boost::signals::detail::slot_base::~slot_base at slot.hpp:27
#13 0x000aad07 in boost::slot<boost::function<bool ()(char, int)> >::~slot at slot.hpp:105
#14 0x001b943b in main at vermes.cpp:102

这是代码:

#include <boost/signal.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/function.hpp>
#include <boost/bind.hpp>

bool dummyfunc(char,int) { return false; }

int main(int argc, char **argv)
{
boost::signal<bool (char, int)> myslot;
myslot.connect(0, &dummyfunc);
return 0;
}

这是我第一次使用 Boost,而且我对要移植到这里的项目的代码也完全陌生。

这就是为什么我想问一下这样的崩溃是否可以由 Boost 以任何方式解释,或者它是否一定与 Boost 无关。

我已经尝试理解崩溃本身,但我不知何故被困住了。似乎这里要删除的 std::vector 可能被搞乱了(搞砸了 = 内存损坏)。该 vector 是 slot_base::data_t 的成员。删除是在 slot_base::shared_ptr 的析构函数中完成的。所以也许 shared_ptr 也被搞砸了——所以甚至整个 slot_base 也可能被搞砸了。但是在我的代码中,我真的看不出内存会被弄乱的原因。这甚至是构建 myslot 后的第一个访问。

补充:我还不太明白的是,为什么在进行连接时会在此处调用 ~slot_base()。但是我也没有找到connect-memberfunction。那是什么地方的魔法万隆吗?

最佳答案

我发现了问题。当我启用这些预处理器定义时(我的 Xcode 在调试配置中默认这样做),它崩溃了:

-D _GLIBCXX_DEBUG=1
-D _GLIBCXX_DEBUG_PEDANTIC=1

我猜想 Boost (bjam) 在没有这些的情况下编译,这会导致这样的问题,因为 STL 结构(如 vector)在编译时有或没有这个在二进制形式中看起来不同。

关于c++ - Boost:boost::slot<>::~slot 崩溃的原因可能是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1823605/

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