2014-10-31 4 views
0

나는 shared_ptr을 몇 가지 이상한 행동을 발생하여 이런 이유를 설명 할 수 없다 :분할 오류 : shared_ptr의

class Selection : public Operator { 
public: 
    Selection(std::shared_ptr<QueryQualification> qualificiation) : qualification(qualification) { } 
... 
private: 
    std::shared_ptr<QueryQualification> qualification; 
}; 

: 세그먼트 오류가 발생합니다 선택의 생성자를

std::shared_ptr<QueryQualification> qualification = query->getQualification(); 
if (qualification != nullptr) { 
    // add selection 
    std::shared_ptr<Operator> selection = std::shared_ptr<Operator>(new Selection(qualification)); 
    selection->setLeftChild(scan); 
    ... 
} 

을 그리고 여기에 여기서 move semantics를 사용하여 복사 동작을 향상시킬 수 있지만 먼저 실행 코드를 얻고 싶습니다.

위 코드 선택의 생성자 세그먼트 오류를 ​​제기 The backtrace of the error

SelectionOperator.hpp (라인 24)는 상기 선택 생성자의 코드 라인.

자격 개체가 Selection에 인수로 제공되기 전에 완벽하게 유효하므로 여기에서 무슨 일이 일어나고 있는지 이해하지 못합니다.

미리 감사드립니다.

+0

이 시점에서 쿼리가 null입니까? – BlamKiwi

+0

아니요, 쿼리가 유효합니다. std :: shared_ptr qualification = query-> getQualification();을 볼 수 있습니다. 그렇지 않으면 이미 세그먼트 화 오류가 발생합니다. – moo

+0

'query-> GetQualification()'은 무엇을 반환합니까? 'shared_ptr','unique_ptr', 당신이'delete'해야하는 소유 raw 포인터, 또는 소유하지 않은 raw 포인터? – Deduplicator

답변

-1
class Selection : public Operator { 
public: 
    Selection(std::shared_ptr<QueryQualification> qualification) : m_qualification(qualification) { } 
... 
private: 
    std::shared_ptr<QueryQualification> m_qualification; 
}; 
+0

왜이 downvoted 무엇입니까? – davidc

+1

이 작은 실수가 오류가 발생한 이유가 아니기 때문에. –