Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2009, 21:37   #1
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию List index out of bounds (91)

Код:
procedure TForm2.sSpeedButton2Click(Sender: TObject);
var
  hSnapShot: THandle;
  ProcInfo: TProcessEntry32;
  kick,system:tstringlist;
  i,a,b,c:integer;
    user:tstringlist;
begin
listbox1.Clear;
listbox2.Clear;
  hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (hSnapShot <> THandle(-1)) then
  begin
    ProcInfo.dwSize := SizeOf(ProcInfo);
    if (Process32First(hSnapshot, ProcInfo)) then
    begin
      while (Process32Next(hSnapShot, ProcInfo)) do
      listbox1.Items.add(ProcInfo.szExeFile);
    end;
    CloseHandle(hSnapShot);
  end;
  ListBox1.Items.Delete(0);
  kick:=tstringlist.Create;
  if fileexists('kick.txt')=false then kick.SaveToFile('kick.txt');
  kick.LoadFromFile('kick.txt');
  listbox2.Items.Text:=kick.Text;
  kick.Free;
  system:=tstringlist.Create;
  system.Add('explorer.exe');
  system.Add('svchost.exe');
  system.Add('csrss.exe');
  system.Add('winlogon.exe');
  system.Add('services.exe');
  system.Add('smss.exe');
  system.Add('spoolsv.exe');
  system.Add('wininit.exe');
  system.Add('lsass.exe');
  system.Add('lsm.exe');
  system.Add('dwm.exe');
  system.Add('nvSCPAPISvr.exe');
  user:=tstringlist.Create;
  if fileexists('user.txt')=false then user.SaveToFile('user.txt') else user.LoadFromFile('user.txt');


  for I := listbox1.count - 1 downto 0 do begin

  for a :=listbox2.count-1 downto 0 do begin
  if listbox1.Items.Strings[i]=listbox2.Items.Strings[a] then listbox1.Items.Delete(i);
  end;

  if checkbox1.Checked=false then begin
  for b :=system.count-1 downto 0 do begin
  if listbox1.Items.Strings[i]=system.Strings[b] then listbox1.Items.Delete(i);
  end;
  end;

  for c := user.count -1 downto 0 do begin
  if listbox1.Items.Strings[i]=user.Strings[c] then listbox1.Items.Delete(i);
  end;

  end;
  label1.Caption:='Количество процесов - '+IntToStr(listbox2.Count);
  label2.Caption:='Количество процесов - '+IntToStr(listbox1.Count);
  sstatusbar1.SimpleText:='Обновление завершено';
end;
иногда вылетает ошибка List index out of bounds (91)..
KoBRaAndrey вне форума Ответить с цитированием
Старый 24.12.2009, 21:58   #2
AlexanderKs
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 60
По умолчанию

эта ошибка вылетает когда запрашивается несуществующая строчка.
Неверное обращение может происходить в циклах (в случае, если один из объектов не содержат строк (пустой):
Код:
  for I := listbox1.count - 1 downto 0 do begin
  ....
  for a :=listbox2.count-1 downto 0 do begin
  ....
  for b :=system.count-1 downto 0 do begin
  ....

Последний раз редактировалось AlexanderKs; 24.12.2009 в 22:01.
AlexanderKs вне форума Ответить с цитированием
Старый 24.12.2009, 22:10   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Странно, что вообще что-то работает...
Код:
user:=tstringlist.Create;
if fileexists('user.txt')=false then 
user.SaveToFile('user.txt') else 
user.LoadFromFile('user.txt');
Что будет в user, если файл 'user.txt' еще не создан?


И чему в этом случае будет равно выделенное красным?
Код:
for c := user.count -1 downto 0 do 
begin
if listbox1.Items.Strings[i]=user.Strings[c] then 
listbox1.Items.Delete(i);
end;
mihali4 вне форума Ответить с цитированием
Старый 24.12.2009, 22:19   #4
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

Код:
  if fileexists('user.txt')=false then begin
  user.SaveToFile('user.txt');
  users:=0;
  end else
  user.LoadFromFile('user.txt');
Код:
  if users=1 then begin
  for c := user.count -1 downto 0 do begin
  if listbox1.Items.Strings[i]=user.Strings[c] then listbox1.Items.Delete(i);
  end;
  end;
так решил,теперь не должно вылетать?
KoBRaAndrey вне форума Ответить с цитированием
Старый 24.12.2009, 22:23   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
for I := listbox1.count - 1 downto 0 do begin

  for a :=listbox2.count-1 downto 0 do begin
  if listbox1.Items.Strings[i]=listbox2.Items.Strings[a] then listbox1.Items.Delete(i);
  end;
берем случай listbox1 содержит 1 запись
и listbox2 - 2 записи такие, что они обе равны единственной записи из ListBox1
удаляем из ListBox1 по первому сравнению, получаем пустой Listbox1 и с чем теперь нам сравнивать (цикл по a еще не закончился)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 24.12.2009, 22:28   #6
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

выйдет ошибка тогда... но впринцепе с 2 мя процессами норм пашет
KoBRaAndrey вне форума Ответить с цитированием
Старый 25.12.2009, 15:29   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
иногда вылетает ошибка List index out of bounds (91)..
Цитата:
выйдет ошибка тогда... но впринцепе с 2 мя процессами норм пашет
зачем ТРИ раза проверять один список
если можно проверить все сразу
Код:
fo j:=listbox1.count downto 0 do
begin
  if listbox2.indexof( listbox1.items.strings[j] )>=0 
or system.indexof( listbox1.items.strings[i] )>=0//а здесь добавить chexbox1.checked
or user.indexof( listbox1.items.strings[j]) then listbox.items.delete(j);>=0
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 25.12.2009 в 15:35. Причина: забыл прj checkbox
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
List index out of bounds (44) KoBRaAndrey Общие вопросы Delphi 5 11.12.2009 23:03
Трудный list index out of bounds Gypsy Общие вопросы Delphi 8 11.11.2009 15:12
Сообщение об ошибке LIST INDEX OUT IF BOUNDS cowboy Общие вопросы Delphi 9 16.10.2009 13:34
обход ошибки List index out of bounds (0) Яр|/||< (^_^) Общие вопросы Delphi 3 29.06.2009 12:45