Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.11.2012, 00:59
KillDead KillDead вне форума
Прохожий
 
Регистрация: 16.11.2012
Сообщения: 3
Репутация: 10
По умолчанию Падение при парсинге xml, переполение стека?

Здравствуйте. Есть конфиг в 5kb записанный в xml файле. Я парсю его в массив, который состоит из классов в которых есть ещё массивы. Вешаю все функции парсинга на обработку по нажатию кнопки - и тут падение, access violation at address 00000000 и открывается дамп памяти в котором хз что.
Путём комментирования кода выявил что если убрать кусок парсинга - всё работает. Возможно его надо по другому организовывать? Сейчас примерно следующее:

Код:
 // LOAD INFO 
  xmlDoc := IXMLDOMDocument(CreateOleObject('msxml.domdocument'));
  xmlDoc.load('E:\1.xml');
   xmlDoc.async := false;
    if  xmlDoc.parseError.reason <> '' then
  begin
    ShowMessage( xmlDoc.parseError.reason );
  end else
  begin

        nlist:= xmlDoc.getElementsByTagName('p');
 
       SetLength( allPItemInfo, nlist.length );
       for i := 0 to nlist.length-1 do  begin
      
          xmlpItem    :=   nlist.item[i].childNodes  ;
          xmlpItemAdd  := pItem.Create;
          xmlpItemAdd.name := nlist.item[i].attributes.getNamedItem('name').nodeValue ;
          SetLength(xmlpItemAdd.params, xmlpItem.length-1);

       for ii := 0 to xmlpItem.length-1 do  begin

            if  xmlpItem.item[ii].nodeName = 'desc' then begin
                 xmlpItemAdd.desc := xmlpItem.item[ii].text ;
            end else
                begin
{ ЕСЛИ ЗАКОМЕНИТЬ ЭТО}
            xmlpItemAdd.params[ii] := pItemParam.Create;

            xmlpItemAdd.params[ii].name :=  xmlpItem.item[ii].nodeName ;
            xmlpItemAdd.params[ii].text :=  xmlpItem.item[ii].text ;               { { ДО СЮДА  }
     
              end;
         end;   
        allPItemInfo[i] := xmlpItemAdd;

       end;
    end;
Использую типы
Код:
  pItemParam  = class
     name : string;
     text: string;

  end;
  pItem  = class
     name : string;
     desc : string;
     layer: string;
     params : array of  pItemParam;
  end;
...

  allPItemInfo : array of  pItem;

То всё работает, более менее, протестить не могу так как дальше оно не идёт без конфига. + У меня там ещё много массивов, у которых я постоянно меняю длину на увеличение и уменьшение, может из -за них быть?
Ответить с цитированием
  #2  
Старый 20.11.2012, 02:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,098
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Известная проблема - COM-объект умирает.
Попробуй отключить оптимизатор.
Еще можно попробовать создавать COM-объект так:
Код:
var
  xmlDoc : TXMLDocument;
begin
  xmlDoc := CreateOleObject('msxml.domdocument') As IXMLDocument;
  ...
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
KillDead (20.11.2012)
  #3  
Старый 20.11.2012, 08:15
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Советую использовать NativeXML.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:51.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025