代碼中使用了TinyXML庫(kù),在使用過程中發(fā)現(xiàn)一個(gè)奇怪的問題,這個(gè)問題簡(jiǎn)化描述如下:
1、編寫一個(gè)lib,接口為:
void BuildXMLFile(TiXmlDocument& doc)
{
TiXmlPrinter printer;
printer.SetIndent( "" );
doc.Accept( &printer );
}
2、編寫一個(gè)win32控制臺(tái)程序,調(diào)用這個(gè)接口:
int main()
{
TiXmlDocument doc;
doc.Parse( "<?xml version=\"1.0\" encoding=\"gb2312\" ?><xml>aaa</xml>" );
BuildXMLFile(doc);
return 0;
}
現(xiàn)象:執(zhí)行到BuildXMLFile(doc)時(shí),doc.Accept(
&printer)出錯(cuò),彈出user breakpoint called.....錯(cuò)誤。

這個(gè)xml絕對(duì)沒有錯(cuò)誤(有可能貼出格式不對(duì),因此在這縮寫了),而且我如此調(diào)用并不出錯(cuò)(或BuildXMLFile調(diào)用后打印也不出錯(cuò)),只有在BuildXMLfile()內(nèi)部才彈出那個(gè)對(duì)話框。
int main()
{
TiXmlDocument doc;
doc.Parse( "<?xml version=\"1.0\" encoding=\"gb2312\" ?><xml>aaa</xml>" );
TiXmlPrinter printer;
printer.SetIndent( "" );
doc.Accept( &printer );
//BuildXMLFile(doc);
return 0;
}
一開始我很納悶:
首先,我并未對(duì)doc進(jìn)行任何操作,只是一個(gè)doc.Accept()的操作,為什么在接口外調(diào)用就可以,在接口內(nèi)部調(diào)用卻不可以呢?而且,我在接口內(nèi)部生成的doc,accpet操作也并不出錯(cuò),真的很奇怪的一個(gè)問題,跟蹤調(diào)試發(fā)現(xiàn):

從堆棧中,我感覺發(fā)現(xiàn)了點(diǎn)問題,但是還不能確定是不是這個(gè)原因?qū)е隆R虼税l(fā)上來問問大家有沒有碰過這個(gè)問題,改如何解釋?