Здравствуйте. Есть конфиг в 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;
То всё работает, более менее, протестить не могу так как дальше оно не идёт без конфига. + У меня там ещё много массивов, у которых я постоянно меняю длину на увеличение и уменьшение, может из -за них быть?