1
我来这里问你的意见。 我是一个大项目的新手,所以我会试着描述一下我看到的简单示例。锁定互斥锁的分段错误
顶部回溯是
#0 0xb6adfc6d in pthread_mutex_lock() from /usr/lib/libpthread.so.0
#1 0x080d8565 in boost::mutex::lock()()
#2 0x080d8613 in boost::unique_lock<boost::mutex>::lock()()
#3 0x080d8642 in boost::unique_lock<boost::mutex>::unique_lock(boost::mutex&)
#4 0x... in ??? //just ??? in stack
#5 0x... in ???
#6 0x... in ???
看来互斥体不存在,但它是在类构造器中创建的。 例子:
class A
{
boost::mutex::scoped_lock mutex_;
public:
A(): mutex_() {}
void Read (...)
{
//some checks
boost::mutex::scoped_lock lock(mutex_); // <-- Segfault
//read
}
void Write (...)
{
//some checks
boost::mutex::scoped_lock lock(mutex_);
//write
}
};
这似乎很奇怪我,因为我不知道该段错误或可能的方式来找到问题的根源的原因。 我很乐意听到您对此的任何建议。
用启用调试信息编译代码(例如GCC和clang的'-g'选项),然后再次运行。你应该希望在回溯中获得更多的信息。 – 2013-04-07 18:31:13
至于崩溃,你确定你在有效的对象上调用'Read'函数吗?即不是你已经删除的对象,或者使用指针/引用从某个函数返回的局部变量?您应该可以提供更多信息,例如如何创建对象或从何处获取对象。 – 2013-04-07 18:32:32
谢谢我会关注这个说结果的人。 – Torrius 2013-04-07 18:57:00