2014-10-15 3 views
0

코드를 실행할 때 세그먼트 화 오류가 발생했습니다. 오류/경고없이 컴파일되지만 실행시 오류 Segmentation fault이 발생합니다. 아래에 코드 스 니펫이 있습니다.C++ Segmentation Fault - tinyXML

XMLElement *pStartTimeStamp = pRoot->FirstChildElement("mobileDevice")->FirstChildElement("RealTimeInformation"); 
XMLElement *pRealtimeStore = nullptr; 
XMLElement *pIter0 = pStartTimeStamp->FirstChildElement("RunID"); 
while (pIter0 != nullptr) { 
    pRealtimeStore = pIter0; 
    pIter0 = pIter0->NextSiblingElement("startTimeStamp"); 
} 

if (pRealtimeStore != nullptr) { 
    XMLElement *pNewStartTimeStamp = doc.NewElement("startTimeStamp"); 
    pNewStartTimeStamp->SetText("pNewTimeStamp"); 
    pStartTimeStamp->InsertAfterChild(pRealtimeStore, pNewStartTimeStamp); 

} 

편집 : 나는 gdb를 실행 시도하지만이 줄에서 실패 코드를 단계별로 때 그것은

Program received signal SIGSEGV, Segmentation fault. 
0x0000000000402ada in tinyxml2::XMLNode::FirstChildElement (this=0x0, value=0x408dd8 "RunID") at tinyxml2.cpp:745 
745  for(XMLNode* node=_firstChild; node; node=node->_next) { 

결과 :

20  XMLElement *pIter0 = pStartTimeStamp->FirstChildElement("runID"); 
(gdb) next 

Program received signal SIGSEGV, Segmentation fault. 
0x0000000000402ada in tinyxml2::XMLNode::FirstChildElement (this=0x0, value=0x408dd8 "runID") at tinyxml2.cpp:745 
745  for(XMLNode* node=_firstChild; node; node=node->_next) { 

XML 조각

<mobileDevice> 
     <mDeviceID></mDeviceID> 
     <deviceDescription></deviceDescription> 
     <units></units> 
     <devicePlacement></devicePlacement> 
     <quantisationResolution></quantisationResolution> 
     <realTimeInformation> 
      <runID/> 
      <sampleRate/> 
      <startTimeStamp/> 
      <endTimeStamp/> 
      <data/> 
     </realTimeInformation> 
     <event> 
      <mEventID/> 
      <timeStamp/> 
      <data/> 
      <support/> 
     </event> 
    </mobileDevice> 
+0

정확하게 세분화 오류가 발생하는 줄? 디버거를 사용하여 찾을 수 있습니다. – UnholySheep

+0

'gdb'를 실행하려했지만'no debugging symbols found '라는 메시지가 나타났습니다. – Colin747

+0

그러면 gdb에 필요한'-g' 플래그없이 코드를 빌드했을 것입니다. – UnholySheep

답변

0

은 다음 줄이 널

XMLElement *pStartTimeStamp = pRoot->FirstChildElement("mobileDevice")->FirstChildElement("RealTimeInformation"); 

이 "이"포인터가 null 말하는 gdb를 출력에 의해 분명하다을 반환하는 것으로 보인다.

+0

'this = 0x0'은 무엇을 의미합니까? – Colin747

+0

예, 메서드가 호출되면 메서드가 멤버에 액세스하려고하자마자 세그먼트 위반이 발생합니다. –

+0

또한 구문 분석하려는 XML 파일 조각을 추가하면 도움이 될 수 있습니다. –

0

나는 이들 중 하나가 null의 내기 :

pRoot 
pRoot->FirstChildElement("mobileDevice") 
pStartTimeStamp 
pNewStartTimeStamp 

그래서 당신이 뭔가를 추적하는 경우에 대해 어떤 찾는 방법.

+0

'gdb' 출력으로 질문을 업데이트했습니다. – Colin747

+0

MobileDevice에서 RealTimeInformation을 찾을 수 없으므로 pStartTime이 null입니다. 내 생각 엔? –

+0

맞춤법 오류 ("realTimeInformation")에 r이 (가) R ... 죄송합니다. – Colin747

관련 문제