2011-09-05 121 views
2

我在使用Visual Studio 2005编译的Windows CE 6.0下运行RapidXml 1.13时遇到了一个非常奇怪的问题。我有一个非常小的程序,运行:在Windows CE 6.0/Windows Mobile/Windows Embedded Compact下使用RapidXml的奇怪例外

#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

第一次机会异常: 0000005:访问冲突写入位置0x0001fb48。

然后调试器指向这一行(1366在rapidxml.hpp)的罪魁祸首(开括号):

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++编译器。我不知道还有甚么可能。

在此先感谢!

+1

does'xml_document <> doc;'faile(默认是'char')?怎么样'xml_document doc;'? CE非常偏向unicode,所以我想知道模板中的某些东西是否在某处扩展。 – ctacke

+0

它的确如此。我想到了。更新的问题。谢谢! –

回答

3

我找到了解决方案。 RapidXML在加载后分配它自己的内存池。问题是,我认为它将它分配给堆栈,并且我得到堆栈溢出! (我偶然发现第一个问题的问题实际上是堆栈溢出)。无论如何,减少池的大小解决了我的问题。