Странные исключения при использовании RapidXml под Windows CE 6.0/Windows Mobile/Windows Embedded Compact

У меня возникла очень странная проблема при попытке запустить RapidXml 1.13 под Windows CE 6.0, скомпилированную с помощью Visual Studio 2005. У меня очень маленькая программа, которая не запускается:

#include <rapidxml.hpp>
using namespace rapidxml;

int _tmain(int argc, _TCHAR* argv[])
{
    xml_document<char> doc;
    return 0;
}

Он отлично компилируется с 0 ошибками и 0 предупреждениями (на W3). Однако, когда я запускаю или отлаживаю программу, я получаю исключение нарушения прав доступа:

Исключение первого шанса по адресу 0x000110d4 в RapidXml_Test.exe: 0xC0000005: место записи нарушения прав доступа 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++. Я не знаю, что еще это может быть.

Заранее спасибо!


person Rotsiser Mho    schedule 05.09.2011    source источник
comment
xml_document<> doc; тоже не работает (по умолчанию char)? Как насчет xml_document<wchar_t)> doc;? CE сильно ориентирован на юникод, поэтому мне интересно, расширяется ли что-то в шаблонах где-то.   -  person ctacke    schedule 06.09.2011
comment
Оно делает. Я понял. Обновленный вопрос. Спасибо!   -  person Rotsiser Mho    schedule 30.09.2011


Ответы (1)


Я нашел решение. RapidXML выделяет собственный пул памяти после загрузки. Проблема в том, что я думаю, что он выделяет его в стеке, и я получаю переполнение стека! (Как удачно, что проблема с моим первым вопросом на самом деле БЫЛА переполнением стека). В любом случае, уменьшение размера пула решило мою проблему.

person Rotsiser Mho    schedule 30.09.2011