代码中使用了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操作也并不出错,真的很奇怪的一个问题,跟踪调试发现:
从堆栈中,我感觉发现了点问题,但是还不能确定是不是这个原因导致。因此发上来问问大家有没有碰过这个问题,改如何解释?