【发布时间】:2014-10-15 12:15:51
【问题描述】:
当我尝试执行我的代码时遇到分段错误,它编译时没有错误/警告,但在执行时给出错误Segmentation fault。下面是sn-p的代码。
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 sn-p
<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>
【问题讨论】:
-
哪一行导致分段错误?使用调试器找到它
-
我尝试运行
gdb,但导致错误no debugging symbols found -
那么你可能已经构建了没有
-g标志的代码,这是gdb所必需的 -
使用
-g重建输出存在问题。 -
然后测试每个指针是否为 nullptr。但它很可能是 pStartTimeStamp。
标签: c++ linux segmentation-fault tinyxml