在Windows CE 6.0 / Windows Mobile / Windows Embedded Compact下使用RapidXml的奇怪异常

时间:2011-09-05 17:52:25

标签: c++ visual-studio-2005 windows-ce rapidxml

尝试在使用V​​isual 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 ++编译器。我不知道它还能是什么。

提前致谢!

1 个答案:

答案 0 :(得分:3)

我找到了解决方案。一旦加载,RapidXML就会分配自己的内存池。问题是,我认为它在堆栈上分配它,我得到堆栈溢出! (这里我的第一个问题的问题实际上是一个堆栈溢出是多么偶然)。无论如何,减小池的大小解决了我的问题。