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 ???
이지만이 클래스의 생성자에서 생성됩니다. 예 : 나는 아무 생각는 segfault 또는 근본 원인을 찾을 수있는 방법의 이유가 없기 때문에
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의 경우 -g 옵션, 예를 들어 clang) 다시 실행하십시오. 해당 백 트레이스에서 더 많은 정보를 얻으실 수 있습니다. –
크래시에 관해서는 유효한 객체에서'Read' 함수를 호출하고 있습니까? 나는. 삭제 한 객체 나 일부 함수에서 반환 된 로컬 변수에 대한 포인터/참조를 사용하지 않습니까? 객체가 어떻게 생성되었는지, 어디에서 가져올 지와 같은 더 많은 정보를 제공해야합니다. –
감사합니다. 결과에 대해이 말에주의를 기울 이겠습니다. – Torrius