2

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

提前致谢!

4

1 回答 1

3

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

于 2011-09-30T04:00:34.523 回答