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