Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при закрытиии динамического массива [D7, WinXP]


sergg ©   (2004-10-13 16:27:00) 

При закрытии динамического массива как при выходе из программы, так и при пирсвоении его имени nil выдается
Access violation at adress 00401D4E in module 'employees.exe'. Write of adress 00000063.
В чем тут может быть дело?


sergg   (2004-10-13 17:24:00) [1]

Спасибо


sergg   (2004-10-13 17:01:00) [2]

Блин, я ведь длину числа массива определяю не так как надо!!!!! :(((


sergg   (2004-10-13 17:01:00) [3]

Блин, я ведь длину числа массива определяю не так как надо!!!!! :(((


Семен Сорокин   (2004-10-13 16:56:00) [4]

собака здесь скорее всего:

TVPostNameEmployeeArray[ Fields.Fields[0].AsInteger].Numbe

Range Check Error - галочкеу в опциях проекта постаь


Суслик   (2004-10-13 16:56:00) [5]

может быт что угодно.
один из вариантов:
1) у тебя в project options отключен флаг range check error
2) при обращении выходишь за границу массива. Где гарантия, что Fields.Fields[2].AsInteger имеет значение <= high(твоего массива)?


sergg   (2004-10-13 16:38:00) [6]

Массив состоит из структур такого типа:  

TreeViewRecord = record
 Node: TTreeNode;
 Number: integer;
 Field: string;
 end;


sergg   (2004-10-13 16:36:00) [7]

try
 with DataModule2.ADOQueryTreeView do
 begin
//Âûáîðêà ñîòðóäíèêîâ
   Close;
   SQL.Clear;
   SQL.Add('SELECT Employees.Number,  Employees.SurName +" "+ Employees.Name +" "+ Employees.Patronymic, ');
   SQL.Add('Employees.SubDivision FROM Employees');
   SQL.Add('');
   SQL.Add('');
   Open;

//Îïðåäåëåíèå äëèíà ìàññèâà TVSubDivisionsArray
   SetLength(TVPostNameEmployeeArray, RecordCount+1);

   if RecNo >0 then
   begin
//Çàíåñåíèå ïîä÷èíåííûõ âåòâåé ñîòðóäíèêîâ
     First;
     for i:=1 to RecordCount do
     begin
         TVPostNameEmployeeArray[Fields.Fields[0].AsInteger].Number:= Fields.Fields[0].AsInteger;
       :((  TVPostNameEmployeeArray[Fields.Fields[0].AsInteger].Node:= Form7.TreeView1.Items.AddChild(TVSubDivisionsArray[Fields.Fields[2].AsInteger].Node, Fields.Fields[1].AsString + Fields.Fields[0].AsString);
       Next;
     end;
   end;
end;

Ошибка пропадает при комментировании строки помеченной :((


Суслик   (2004-10-13 16:29:00) [8]


> В чем тут может быть дело?

в том, что ты:
1) у тебя массив записей, в которых есть длинные строки, с которыми ты работал через move и writebuff или прочими ф-ями с нетипизированными параметрами.
2) ты работал указанными выше функциями  с самим массивом.

приводи код, как ты используешь массив


Наверх

Титульная страница Поиск, карта сайта Написать письмо