Показать сообщение отдельно
  #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;

То всё работает, более менее, протестить не могу так как дальше оно не идёт без конфига. + У меня там ещё много массивов, у которых я постоянно меняю длину на увеличение и уменьшение, может из -за них быть?
Ответить с цитированием