XML 文件丢失时 tinyxml2 出现分段错误
Segmentations fault on tinyxml2 when XML file is missed
我正在尝试从 Cophir XML 数据中获取一些信息。但是,某些 XML 文件很差,这会导致分段错误。
我正在尝试执行并导致错误的代码是:
PhotoComments comments;
XMLElement* commentsElement = doc.FirstChildElement("SapirMMObject")->FirstChildElement( "photo" )->FirstChildElement( "comments" );
const char* numComments = commentsElement->GetText();
if (strcmp(numComments, "0")==0 );
else{
commentsElement = doc.FirstChildElement("SapirMMObject")->FirstChildElement( "photo" )->FirstChildElement( "url" )->NextSiblingElement();
XMLElement* commentElement;
commentElement=commentsElement->FirstChildElement("comment");//This is where the segmentation fault happens.
一个好的 Cophir XML 是:
<SapirMMObject>
<MediaLocator>
<MediaUri>384278731</MediaUri>
</MediaLocator>
<photo id="384278731" secret="70755f9300" server="139" farm="1" dateuploaded="1170990970" isfavorite="0" license="0" rotation="0" originalsecret="70755f9300" originalformat="jpg">
<owner nsid="22343845@N00" username="PeeTNeeT" realname="PeeT NeeT" location=""/>
<title>Long Day</title>
<description>3230</description>
<dates posted="1170990970" taken="2007-02-09 04:16:10" takengranularity="0" lastupdate="1175617119"/>
<comments>4</comments>
<notes/>
<tags><tag id="1514691-384278731-297641" author="22343845@N00" raw="forensic" machine_tag="0">forensic</tag>
<tag id="1514691-384278731-1316" author="22343845@N00" raw="train" machine_tag="0">train</tag>
<tag id="1514691-384278731-6816" author="22343845@N00" raw="transport" machine_tag="0">transport</tag>
<tag id="1514691-384278731-31069" author="22343845@N00" raw="public transport" machine_tag="0">publictransport</tag>
<tag id="1514691-384278731-290" author="22343845@N00" raw="people" machine_tag="0">people</tag>
<tag id="1514691-384278731-4523" author="22343845@N00" raw="metro" machine_tag="0">metro</tag>
<tag id="1514691-384278731-294" author="22343845@N00" raw="bw" machine_tag="0">bw</tag>
<tag id="1514691-384278731-293" author="22343845@N00" raw="black and white" machine_tag="0">blackandwhite</tag>
<tag id="1514691-384278731-1449949" author="22343845@N00" raw="peetneet" machine_tag="0">peetneet</tag>
<tag id="1514691-384278731-536" author="22343845@N00" raw="holland" machine_tag="0">holland</tag></tags>
<url>http://farm1.static.flickr.com/139/384278731_70755f9300.jpg</url><comments photo_id="384278731">
<comment id="1514691-384278731-72157594531874043" author="69513727@N00" authorname="phil uk net" datecreate="1171296514" permalink="http://www.flickr.com/photos/peetneet/384278731/#comment72157594531874043">I don't think she got much sleep the night before.</comment>
<comment id="1514691-384278731-72157594542562354" author="25617742@N00" authorname="ankern" datecreate="1171819505" permalink="http://www.flickr.com/photos/peetneet/384278731/#comment72157594542562354">What a high note! Please add to the 'Spontaneous Opera Syndrome' Pool! <a href="http://www.flickr.com/groups/s-o-s/">www.flickr.com/groups/s-o-s/</a></comment>
<comment id="1514691-384278731-72157600025296602" author="86602256@N00" authorname="serakatie" datecreate="1174812250" permalink="http://www.flickr.com/photos/peetneet/384278731/#comment72157600025296602">I love the yawns.
On the buses I ride, people are always sleeping or yawning. : )</comment>
<comment id="1514691-384278731-72157600045352487" author="67288428@N00" authorname="x35mm" datecreate="1175617118" permalink="http://www.flickr.com/photos/peetneet/384278731/#comment72157600045352487">very good</comment></comments></photo>
<Mpeg7>
<Description type="ContentEntityType">
<MultimediaContent type="ImageType">
<Image>
<VisualDescriptor type="ScalableColorType" numOfBitplanesDiscarded="0" numOfCoeff="64"><Coeff>-169 23 -21 54 -21 14 22 29 -4 13 11 22 -10 14 19 22 -7 1 0 2 -1 5 0 0 -15 2 2 0 -3 5 1 -4 -1 0 0 1 0 0 1 2 1 1 1 3 1 2 4 5 2 0 2 2 2 3 3 0 0 0 0 -2 1 0 -3 -3</Coeff>
</VisualDescriptor>
<VisualDescriptor type="ColorStructureType" colorQuant="2">
<Values>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 252 225</Values></VisualDescriptor><VisualDescriptor type="ColorLayoutType"><YDCCoeff>17</YDCCoeff><CbDCCoeff>32</CbDCCoeff><CrDCCoeff>32</CrDCCoeff>
<YACCoeff5>18 18 20 10 15</YACCoeff5>
<CbACCoeff2>16 16</CbACCoeff2>
<CrACCoeff2>16 16</CrACCoeff2></VisualDescriptor>
<VisualDescriptor type="EdgeHistogramType"><BinCounts>3 3 6 6 5 4 3 5 7 3 2 3 5 6 6 4 1 2 6 3 4 3 5 5 6 4 2 5 6 5 6 2 3 3 4 6 1 5 4 3 3 3 3 6 2 2 3 5 6 6 5 2 3 7 4 6 0 5 1 3 3 2 7 0 5 3 3 7 4 5 2 6 3 3 4 1 6 1 5 2</BinCounts></VisualDescriptor>
<VisualDescriptor type="HomogeneousTextureType">
<Average>82</Average>
<StandardDeviation>115</StandardDeviation>
<Energy>214 209 189 199 183 184 189 174 198 193 163 156 160 166 173 166 131 137 132 135 171 143 123 117 130 115 185 118 114 112</Energy>
<EnergyDeviation>213 206 187 204 182 178 179 164 193 190 151 147 151 158 159 151 118 135 126 113 170 123 117 114 128 94 166 100 86 97</EnergyDeviation></VisualDescriptor></Image></MultimediaContent></Description></Mpeg7></SapirMMObject>
导致分段错误的错误 XML 是(注意注释字段不存在):
<SapirMMObject>
<MediaLocator>
<MediaUri>384160944</MediaUri></MediaLocator>
<photo id="384160944" secret="2b5c802b8f" server="124" farm="1" dateuploaded="1170980327" isfavorite="0" license="0" rotation="0">
<owner nsid="22466016@N00" username="pepelsbey" realname="Vadim Makeev" location="Moscow, Russia"/>
<title>«JavaScript libraries overview» speech</title>
<description>October 28th, first WSG-Russia meeting</description>
<dates posted="1170980327" taken="2007-02-09 03:18:47" takengranularity="0" lastupdate="1180122346"/>
<comments>1</comments>
<notes>
<note id="72157594525441634" author="22466016@N00" authorname="pepelsbey" x="43" y="74" w="50" h="50">Marat Tanalin aka MT
http://mtonly.livejournal.com/</note>
<note id="72157594525441869" author="22466016@N00" authorname="pepelsbey" x="181" y="70" w="50" h="50">Yuriy Artyukh aka Akella
http://cssing.org.ua/</note>
<note id="72157594525442055" author="22466016@N00" authorname="pepelsbey" x="288" y="197" w="50" h="50">Marat Mamyashev aka ninja_127
http://cssblast.ru/</note></notes>
<tags>
<tag id="6771949-384160944-267129" author="22466016@N00" raw="wsg" machine_tag="0">wsg</tag>
<tag id="6771949-384160944-4793" author="22466016@N00" raw="russia" machine_tag="0">russia</tag>
<tag id="6771949-384160944-8327" author="22466016@N00" raw="meeting" machine_tag="0">meeting</tag></tags>
<location latitude="55.692293" longitude="37.483978" accuracy="10">
<locality>Moscow</locality>
<county>Moscow</county>
<region>Moskva</region>
<country>Russia</country></location>
<geoperms ispublic="1" iscontact="0" isfriend="0" isfamily="0"/>
<url>http://farm1.static.flickr.com/124/384160944_2b5c802b8f.jpg</url></photo>
<Mpeg7>
<Description type="ContentEntityType">
<MultimediaContent type="ImageType">
<Image>
<VisualDescriptor type="ScalableColorType" numOfBitplanesDiscarded="0" numOfCoeff="64"><Coeff>79 -33 -53 18 -28 -15 3 19 -16 -7 -3 22 -31 3 -6 12 -7 9 -3 8 -15 4 -10 4 -15 5 1 0 -14 5 -1 0 3 -3 -3 -6 2 -1 1 2 3 -3 0 3 0 1 4 3 -5 -3 2 5 0 6 4 3 -7 0 0 -2 -1 0 -3 -3</Coeff></VisualDescriptor>
<VisualDescriptor type="ColorStructureType" colorQuant="2">
<Values>57 0 0 0 8 0 0 27 121 98 1 2 0 1 0 0 61 26 2 0 0 0 19 11 138 166 90 57 5 6 0 3 71 63 47 32 10 11 4 19 156 148 143 92 64 49 23 30 100 83 59 75 53 43 32 57 193 243 158 127 93 91 86 124</Values></VisualDescriptor>
<VisualDescriptor type="ColorLayoutType">
<YDCCoeff>20</YDCCoeff>
<CbDCCoeff>27</CbDCCoeff>
<CrDCCoeff>36</CrDCCoeff>
<YACCoeff5>16 11 21 6 20</YACCoeff5>
<CbACCoeff2>17 17</CbACCoeff2>
<CrACCoeff2>16 15</CrACCoeff2></VisualDescriptor>
<VisualDescriptor type="EdgeHistogramType"><BinCounts>3 3 4 5 5 2 2 2 4 3 4 3 3 6 5 4 1 5 5 6 3 2 4 4 6 0 2 2 4 4 4 2 3 4 5 3 0 5 2 4 1 6 2 2 4 3 2 2 5 6 1 3 0 2 5 3 2 5 1 4 0 5 3 0 1 3 4 2 6 3 4 5 4 2 3 6 1 3 5 4</BinCounts></VisualDescriptor>
<VisualDescriptor type="HomogeneousTextureType">
<Average>75</Average>
<StandardDeviation>100</StandardDeviation><Energy>176 178 187 188 174 160 175 164 174 178 173 167 159 162 149 161 143 150 153 161 158 165 168 156 192 204 184 182 204 195</Energy>
<EnergyDeviation>183 175 185 185 173 156 169 160 172 174 163 159 147 156 138 147 127 144 138 135 157 144 160 153 170 174 150 162 156 172</EnergyDeviation></VisualDescriptor></Image></MultimediaContent></Description></Mpeg7></SapirMMObject>
我已经研究过了,但我发现的只是一些人说 "commentElement" 会收到一个空指针,这实际上并没有发生。命令 "commentElement=commentsElement->FirstChildElement("comment");"直接产生分段错误。
问题出在之前,你在调用
FirstChildElement( "url" )->NextSiblingElement();
所以你问的是 url
元素相同深度但在它之后的节点。第二个 XML 树在 url 节点之后没有任何兄弟节点,因此根据文档 0
返回:
Calls NextSibling
and ToElement
. Will skip all non-Element nodes. Returns 0 if there is not another element.
所以你应该在尝试取消引用之前检查 commentsElement != 0
。
我正在尝试从 Cophir XML 数据中获取一些信息。但是,某些 XML 文件很差,这会导致分段错误。
我正在尝试执行并导致错误的代码是:
PhotoComments comments;
XMLElement* commentsElement = doc.FirstChildElement("SapirMMObject")->FirstChildElement( "photo" )->FirstChildElement( "comments" );
const char* numComments = commentsElement->GetText();
if (strcmp(numComments, "0")==0 );
else{
commentsElement = doc.FirstChildElement("SapirMMObject")->FirstChildElement( "photo" )->FirstChildElement( "url" )->NextSiblingElement();
XMLElement* commentElement;
commentElement=commentsElement->FirstChildElement("comment");//This is where the segmentation fault happens.
一个好的 Cophir XML 是:
<SapirMMObject>
<MediaLocator>
<MediaUri>384278731</MediaUri>
</MediaLocator>
<photo id="384278731" secret="70755f9300" server="139" farm="1" dateuploaded="1170990970" isfavorite="0" license="0" rotation="0" originalsecret="70755f9300" originalformat="jpg">
<owner nsid="22343845@N00" username="PeeTNeeT" realname="PeeT NeeT" location=""/>
<title>Long Day</title>
<description>3230</description>
<dates posted="1170990970" taken="2007-02-09 04:16:10" takengranularity="0" lastupdate="1175617119"/>
<comments>4</comments>
<notes/>
<tags><tag id="1514691-384278731-297641" author="22343845@N00" raw="forensic" machine_tag="0">forensic</tag>
<tag id="1514691-384278731-1316" author="22343845@N00" raw="train" machine_tag="0">train</tag>
<tag id="1514691-384278731-6816" author="22343845@N00" raw="transport" machine_tag="0">transport</tag>
<tag id="1514691-384278731-31069" author="22343845@N00" raw="public transport" machine_tag="0">publictransport</tag>
<tag id="1514691-384278731-290" author="22343845@N00" raw="people" machine_tag="0">people</tag>
<tag id="1514691-384278731-4523" author="22343845@N00" raw="metro" machine_tag="0">metro</tag>
<tag id="1514691-384278731-294" author="22343845@N00" raw="bw" machine_tag="0">bw</tag>
<tag id="1514691-384278731-293" author="22343845@N00" raw="black and white" machine_tag="0">blackandwhite</tag>
<tag id="1514691-384278731-1449949" author="22343845@N00" raw="peetneet" machine_tag="0">peetneet</tag>
<tag id="1514691-384278731-536" author="22343845@N00" raw="holland" machine_tag="0">holland</tag></tags>
<url>http://farm1.static.flickr.com/139/384278731_70755f9300.jpg</url><comments photo_id="384278731">
<comment id="1514691-384278731-72157594531874043" author="69513727@N00" authorname="phil uk net" datecreate="1171296514" permalink="http://www.flickr.com/photos/peetneet/384278731/#comment72157594531874043">I don't think she got much sleep the night before.</comment>
<comment id="1514691-384278731-72157594542562354" author="25617742@N00" authorname="ankern" datecreate="1171819505" permalink="http://www.flickr.com/photos/peetneet/384278731/#comment72157594542562354">What a high note! Please add to the 'Spontaneous Opera Syndrome' Pool! <a href="http://www.flickr.com/groups/s-o-s/">www.flickr.com/groups/s-o-s/</a></comment>
<comment id="1514691-384278731-72157600025296602" author="86602256@N00" authorname="serakatie" datecreate="1174812250" permalink="http://www.flickr.com/photos/peetneet/384278731/#comment72157600025296602">I love the yawns.
On the buses I ride, people are always sleeping or yawning. : )</comment>
<comment id="1514691-384278731-72157600045352487" author="67288428@N00" authorname="x35mm" datecreate="1175617118" permalink="http://www.flickr.com/photos/peetneet/384278731/#comment72157600045352487">very good</comment></comments></photo>
<Mpeg7>
<Description type="ContentEntityType">
<MultimediaContent type="ImageType">
<Image>
<VisualDescriptor type="ScalableColorType" numOfBitplanesDiscarded="0" numOfCoeff="64"><Coeff>-169 23 -21 54 -21 14 22 29 -4 13 11 22 -10 14 19 22 -7 1 0 2 -1 5 0 0 -15 2 2 0 -3 5 1 -4 -1 0 0 1 0 0 1 2 1 1 1 3 1 2 4 5 2 0 2 2 2 3 3 0 0 0 0 -2 1 0 -3 -3</Coeff>
</VisualDescriptor>
<VisualDescriptor type="ColorStructureType" colorQuant="2">
<Values>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 252 225</Values></VisualDescriptor><VisualDescriptor type="ColorLayoutType"><YDCCoeff>17</YDCCoeff><CbDCCoeff>32</CbDCCoeff><CrDCCoeff>32</CrDCCoeff>
<YACCoeff5>18 18 20 10 15</YACCoeff5>
<CbACCoeff2>16 16</CbACCoeff2>
<CrACCoeff2>16 16</CrACCoeff2></VisualDescriptor>
<VisualDescriptor type="EdgeHistogramType"><BinCounts>3 3 6 6 5 4 3 5 7 3 2 3 5 6 6 4 1 2 6 3 4 3 5 5 6 4 2 5 6 5 6 2 3 3 4 6 1 5 4 3 3 3 3 6 2 2 3 5 6 6 5 2 3 7 4 6 0 5 1 3 3 2 7 0 5 3 3 7 4 5 2 6 3 3 4 1 6 1 5 2</BinCounts></VisualDescriptor>
<VisualDescriptor type="HomogeneousTextureType">
<Average>82</Average>
<StandardDeviation>115</StandardDeviation>
<Energy>214 209 189 199 183 184 189 174 198 193 163 156 160 166 173 166 131 137 132 135 171 143 123 117 130 115 185 118 114 112</Energy>
<EnergyDeviation>213 206 187 204 182 178 179 164 193 190 151 147 151 158 159 151 118 135 126 113 170 123 117 114 128 94 166 100 86 97</EnergyDeviation></VisualDescriptor></Image></MultimediaContent></Description></Mpeg7></SapirMMObject>
导致分段错误的错误 XML 是(注意注释字段不存在):
<SapirMMObject>
<MediaLocator>
<MediaUri>384160944</MediaUri></MediaLocator>
<photo id="384160944" secret="2b5c802b8f" server="124" farm="1" dateuploaded="1170980327" isfavorite="0" license="0" rotation="0">
<owner nsid="22466016@N00" username="pepelsbey" realname="Vadim Makeev" location="Moscow, Russia"/>
<title>«JavaScript libraries overview» speech</title>
<description>October 28th, first WSG-Russia meeting</description>
<dates posted="1170980327" taken="2007-02-09 03:18:47" takengranularity="0" lastupdate="1180122346"/>
<comments>1</comments>
<notes>
<note id="72157594525441634" author="22466016@N00" authorname="pepelsbey" x="43" y="74" w="50" h="50">Marat Tanalin aka MT
http://mtonly.livejournal.com/</note>
<note id="72157594525441869" author="22466016@N00" authorname="pepelsbey" x="181" y="70" w="50" h="50">Yuriy Artyukh aka Akella
http://cssing.org.ua/</note>
<note id="72157594525442055" author="22466016@N00" authorname="pepelsbey" x="288" y="197" w="50" h="50">Marat Mamyashev aka ninja_127
http://cssblast.ru/</note></notes>
<tags>
<tag id="6771949-384160944-267129" author="22466016@N00" raw="wsg" machine_tag="0">wsg</tag>
<tag id="6771949-384160944-4793" author="22466016@N00" raw="russia" machine_tag="0">russia</tag>
<tag id="6771949-384160944-8327" author="22466016@N00" raw="meeting" machine_tag="0">meeting</tag></tags>
<location latitude="55.692293" longitude="37.483978" accuracy="10">
<locality>Moscow</locality>
<county>Moscow</county>
<region>Moskva</region>
<country>Russia</country></location>
<geoperms ispublic="1" iscontact="0" isfriend="0" isfamily="0"/>
<url>http://farm1.static.flickr.com/124/384160944_2b5c802b8f.jpg</url></photo>
<Mpeg7>
<Description type="ContentEntityType">
<MultimediaContent type="ImageType">
<Image>
<VisualDescriptor type="ScalableColorType" numOfBitplanesDiscarded="0" numOfCoeff="64"><Coeff>79 -33 -53 18 -28 -15 3 19 -16 -7 -3 22 -31 3 -6 12 -7 9 -3 8 -15 4 -10 4 -15 5 1 0 -14 5 -1 0 3 -3 -3 -6 2 -1 1 2 3 -3 0 3 0 1 4 3 -5 -3 2 5 0 6 4 3 -7 0 0 -2 -1 0 -3 -3</Coeff></VisualDescriptor>
<VisualDescriptor type="ColorStructureType" colorQuant="2">
<Values>57 0 0 0 8 0 0 27 121 98 1 2 0 1 0 0 61 26 2 0 0 0 19 11 138 166 90 57 5 6 0 3 71 63 47 32 10 11 4 19 156 148 143 92 64 49 23 30 100 83 59 75 53 43 32 57 193 243 158 127 93 91 86 124</Values></VisualDescriptor>
<VisualDescriptor type="ColorLayoutType">
<YDCCoeff>20</YDCCoeff>
<CbDCCoeff>27</CbDCCoeff>
<CrDCCoeff>36</CrDCCoeff>
<YACCoeff5>16 11 21 6 20</YACCoeff5>
<CbACCoeff2>17 17</CbACCoeff2>
<CrACCoeff2>16 15</CrACCoeff2></VisualDescriptor>
<VisualDescriptor type="EdgeHistogramType"><BinCounts>3 3 4 5 5 2 2 2 4 3 4 3 3 6 5 4 1 5 5 6 3 2 4 4 6 0 2 2 4 4 4 2 3 4 5 3 0 5 2 4 1 6 2 2 4 3 2 2 5 6 1 3 0 2 5 3 2 5 1 4 0 5 3 0 1 3 4 2 6 3 4 5 4 2 3 6 1 3 5 4</BinCounts></VisualDescriptor>
<VisualDescriptor type="HomogeneousTextureType">
<Average>75</Average>
<StandardDeviation>100</StandardDeviation><Energy>176 178 187 188 174 160 175 164 174 178 173 167 159 162 149 161 143 150 153 161 158 165 168 156 192 204 184 182 204 195</Energy>
<EnergyDeviation>183 175 185 185 173 156 169 160 172 174 163 159 147 156 138 147 127 144 138 135 157 144 160 153 170 174 150 162 156 172</EnergyDeviation></VisualDescriptor></Image></MultimediaContent></Description></Mpeg7></SapirMMObject>
我已经研究过了,但我发现的只是一些人说 "commentElement" 会收到一个空指针,这实际上并没有发生。命令 "commentElement=commentsElement->FirstChildElement("comment");"直接产生分段错误。
问题出在之前,你在调用
FirstChildElement( "url" )->NextSiblingElement();
所以你问的是 url
元素相同深度但在它之后的节点。第二个 XML 树在 url 节点之后没有任何兄弟节点,因此根据文档 0
返回:
Calls
NextSibling
andToElement
. Will skip all non-Element nodes. Returns 0 if there is not another element.
所以你应该在尝试取消引用之前检查 commentsElement != 0
。