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

У меня возникла очень странная проблема при попытке запустить 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 ++. Я не знаю, что еще это может быть.

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

1 Ответ

3 голосов
/ 30 сентября 2011

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

...