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

這個xml絕對沒有錯誤(有可能貼出格式不對,因此在這縮寫了),而且我如此調用并不出錯(或BuildXMLFile調用后打印也不出錯),只有在BuildXMLfile()內部才彈出那個對話框。
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;
}
一開始我很納悶:
首先,我并未對doc進行任何操作,只是一個doc.Accept()的操作,為什么在接口外調用就可以,在接口內部調用卻不可以呢?而且,我在接口內部生成的doc,accpet操作也并不出錯,真的很奇怪的一個問題,跟蹤調試發現:

從堆棧中,我感覺發現了點問題,但是還不能確定是不是這個原因導致。因此發上來問問大家有沒有碰過這個問題,改如何解釋?