尝试在使用Visual Studio 2005编译的Windows CE 6.0下运行RapidXml 1.13时,我遇到了一个非常奇怪的问题。我有一个非常小的程序无法运行:
#include <rapidxml.hpp>
using namespace rapidxml;
int _tmain(int argc, _TCHAR* argv[])
{
xml_document<char> doc;
return 0;
}
编译好0错误和0警告(在W3)。但是,当我运行或调试程序时,我遇到了访问冲突异常:
RapidXml_Test.exe中0x000110d4的第一次机会异常: 0xC0000005:访问冲突写入位置0x0001fb48。
调试器然后指向此行(rapidxml.hpp中的1366)作为罪魁祸首(开放式大括号):
template<class Ch = char>
class xml_document: public xml_node<Ch>, public memory_pool<Ch>
{
public:
//! Constructs empty XML document
xml_document()
: xml_node<Ch>(node_document)
------->{
}
...
如果有人知道问题是什么,我会非常感激。我有更复杂的代码在我的构建和运行时环境中工作,所以我不怀疑那里。我也非常有信心这不是项目设置。我假设此时RapidXml对模板的使用在某种程度上混淆了Windows CE VC ++编译器。我不知道它还能是什么。
提前致谢!
答案 0 :(得分:3)
我找到了解决方案。一旦加载,RapidXML就会分配自己的内存池。问题是,我认为它在堆栈上分配它,我得到堆栈溢出! (这里我的第一个问题的问题实际上是一个堆栈溢出是多么偶然)。无论如何,减小池的大小解决了我的问题。