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); 

} 

EDIT: Я попытался запустить 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', но это привело к ошибке' не найдены символы отладки' – Colin747

+0

Тогда вы, вероятно, создали код без флага '-g', который необходим для gdb – UnholySheep

ответ

0

кажется, что следующая строка возвращает нуль

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

Это видно по выходу GDB, говоря, что «это» указатель является недействительным.

+0

Это то, что означает 'this = 0x0'? – Colin747

+0

Да, метод вызывается, но он встречает нарушение сегмента, как только метод пытается получить доступ к элементу. –

+0

Кроме того, может быть полезно, если вы добавите фрагмент файла XML, который вы пытаетесь проанализировать. –

0

Держу пари, один из них является пустым:

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

Так, как если вы проследите что-то, чтобы выяснить, какие.

+0

Обновленный вопрос с выходом 'gdb' – Colin747

+0

Так что pStartTime был нулевым, поскольку RealTimeInformation не найдена в mobileDevice. Я думаю? –

+0

В («realTimeInformation») была ошибка орфографии. R был R ... извините за это. – Colin747