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

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

Access Violation


Страницы:   1 2 3 4

Andrewtitoff ©   (2009-02-11 10:11:00) 

Здравствуйте!, подскажите пожалуйста что тут не так?, выскакивает ошибка Access Violation at adress 00404D68 in module 'otchet.exe'. Read of adrdress 403DFFF8

ShowMessage(
' Бригада 1: '+Format('%.4d',[brig[uch[strtoint(Form1.ComboBox8.Text),1]]])+'/'+Format('%f', [brigt[uch[strtoint(Form1.ComboBox8.Text),1]]])+#13#10+
' Бригада 2: '+Format('%.4d',[brig[uch[strtoint(Form1.ComboBox8.Text),2]]])+'/'+Format('%f', [brigt[uch[strtoint(Form1.ComboBox8.Text),2]]])+#13#10+
' Бригада 3: '+Format('%.4d',[brig[uch[strtoint(Form1.ComboBox8.Text),3]]])+'/'+Format('%f', [brigt[uch[strtoint(Form1.ComboBox8.Text),3]]])+#13#10+
' Бригада 4: '+Format('%.4d',[brig[uch[strtoint(Form1.ComboBox8.Text),4]]])+'/'+Format('%f', [brigt[uch[strtoint(Form1.ComboBox8.Text),4]]])+#13#10+
' Бригада 5: '+Format('%.4d',[brig[uch[strtoint(Form1.ComboBox8.Text),5]]])+'/'+Format('%f', [brigt[uch[strtoint(Form1.ComboBox8.Text),5]]])+#13#10+
' Бригада 6: '+Format('%.4d',[brig[uch[strtoint(Form1.ComboBox8.Text),6]]])+'/'+Format('%f', [brigt[uch[strtoint(Form1.ComboBox8.Text),6]]])+#13#10+
' Бригада 7: '+Format('%.4d',[brig[uch[strtoint(Form1.ComboBox8.Text),7]]])+'/'+Format('%f', [brigt[uch[strtoint(Form1.ComboBox8.Text),7]]])+#13#10+
' Бригада 8: '+Format('%.4d',[brig[uch[strtoint(Form1.ComboBox8.Text),8]]])+'/'+Format('%f', [brigt[uch[strtoint(Form1.ComboBox8.Text),8]]])+#13#10+
' Бригада 9: '+Format('%.4d',[brig[uch[strtoint(Form1.ComboBox8.Text),9]]])+'/'+Format('%f', [brigt[uch[strtoint(Form1.ComboBox8.Text),9]]])+#13#10+
'Бригада 10: '+Format('%.4d',[brig[uch[strtoint(Form1.ComboBox8.Text),10]]])+'/'+Format('%f', [brigt[uch[strtoint(Form1.ComboBox8.Text),10]]])+#13#10+
'Бригада 11: '+Format('%.4d',[brig[uch[strtoint(Form1.ComboBox8.Text),11]]])+'/'+Format('%f', [brigt[uch[strtoint(Form1.ComboBox8.Text),11]]])+#13#10+
'Бригада 12: '+Format('%.4d',[brig[uch[strtoint(Form1.ComboBox8.Text),12]]])+'/'+Format('%f', [brigt[uch[strtoint(Form1.ComboBox8.Text),12]]])+#13#10+
'Бригада 13: '+Format('%.4d',[brig[uch[strtoint(Form1.ComboBox8.Text),13]]])+'/'+Format('%f', [brigt[uch[strtoint(Form1.ComboBox8.Text),13]]]));


Anatoly Podgoretsky   (2009-02-11 11:55:00) [21]

> Andrewtitoff  (11.02.2009 11:51:46)  [46]

Когда AV выскакивает, то может любая строчка выделяться...


Сергей М.   (2009-02-11 11:53:00) [22]


> Andrewtitoff ©   (11.02.09 11:51) [46]


Причем здесь это ?
Ты пошагово(F7) прошел до строчки, при выполнении которой начинаются чудеса ?


Andrewtitoff   (2009-02-11 11:51:00) [23]

2 Сергей М.
Когда AV выскакивает почему то эта строчка выделяется...


Сергей М.   (2009-02-11 11:48:00) [24]


> Andrewtitoff ©   (11.02.09 11:28) [40]
>
> На строчке end;
> в процедуре
> procedure TForm1.Button3Click(Sender: TObject);


А как ты там оказался ?


> ничего не понял


Это печально. Очень.


Anatoly Podgoretsky   (2009-02-11 11:44:00) [25]

> Andrewtitoff  (11.02.2009 11:36:43)  [43]

Тебе не понять про что мы.


Andrewtitoff   (2009-02-11 11:36:00) [26]

2 Anatoly Podgoretsky
Куда принимать?
2 Плохиш
Вы вообще про что?...


Плохиш   (2009-02-11 11:34:00) [27]


> Нахрен надо было принимать.

Папик, видно, попросил.


Anatoly Podgoretsky   (2009-02-11 11:30:00) [28]


> а так да... за такой код - эцих с гвоздями на неделю, с
> последующим увольнением

Нахрен надо было принимать.


Andrewtitoff   (2009-02-11 11:28:00) [29]

2 Сергей М.
На строчке
end;
в процедуре
procedure TForm1.Button3Click(Sender: TObject);

2 aik
Ставил..., все равно AV, ое ее почеиму то игнорирует...

2 Ega23
А как без with, через переменную  что ли делать?, остальное исправвил.

2 All

Я ничего не понял, но похоже Ega23 был прав все дело в многократных вычислениях strtoint(Form1.ComboBox8.Text), вот так все заработало:

begin

for n := 1 to 13 do
begin
uch[1,n]:=uch1[n];
uch[2,n]:=uch2[n];
uch[6,n]:=uch6[n];
uch[7,n]:=uch7[n];
uch[8,n]:=uch8[n];
end;

for n := 101 to 813 do
begin
brig[n]:=0;
brigt[n]:=0;
end;

   d1 := 20;
   if s=1 then m1:=12 else m1 := s-1;
   if s=1 then y1:=strtoint(Form1.Combobox9.Text)-1 else y1 := strtoint(Form1.Combobox9.Text);
   d2 := 20;
   m2 := s;
   y2 := strtoint(Form1.Combobox9.Text);

For nLikeADate:=Trunc(EncodeDate(y1,m1,d1)) to Trunc(EncodeDate(y2,m2,d2)) Do
 Begin
 if fileexists(MD+'\Z\'+DateToStr(nLikeADate)+'.lft') then
  Begin
   with TFileStream.create(MD+'\Z\'+DateToStr(nLikeADate)+'.lft', fmShareDenyNone) do
    try
    c:=trunc(Size/671);
    finally
    Free;
    end;
   with TFileStream.create(MD+'\Z\'+DateToStr(nLikeADate)+'.lft',fmOpenRead) do
    try
    read(sms,671);
    for count := 1 to c-1 do
     begin
     read(sms,671);
     if {(sms.PLACE=Form1.ComboBox8.Text)and}(sms.Remont<>'Простой') then
      begin
      if (isNumber(sms.BRIGADE))and(sms.BRIGADE<>'') then
       begin
       k:=strtoint(sms.BRIGADE);
       inc(brig[k]);
       end
      else k:=0;

      if (copy(sms.Remont,3,1)='.')and(copy(sms.Remont,6,1)='.') then
      brigt[strtoint(sms.BRIGADE)]:=brigt[strtoint(sms.BRIGADE)]+0.5 else
       Begin
       uh:=copy(sms.Prostoy,1,2);
       um:=copy(sms.Prostoy,4,2);
       if uh='' then uh:='0';
       if um='' then um:='0';

     if isNumber(um)and isNumber(uh)then
      Begin
      o:=strtoint(um)/60;
      o:=o+strtoint(uh);
      brigt[k]:=brigt[k]+o;
      End;

     End;
    end;
   end;
  finally
  Free;
  end;
 end;
end;
f:=strtoint(Form1.ComboBox8.Text);
ShowMessage(
' Бригада 1: '+Format('%.4d',[brig[uch[f,1]]])+'/'+Format('%f', [brigt[uch[f,1]]])+#13#10+
' Бригада 2: '+Format('%.4d',[brig[uch[f,2]]])+'/'+Format('%f', [brigt[uch[f,2]]])+#13#10+
' Бригада 3: '+Format('%.4d',[brig[uch[f,3]]])+'/'+Format('%f', [brigt[uch[f,3]]])+#13#10+
' Бригада 4: '+Format('%.4d',[brig[uch[f,4]]])+'/'+Format('%f', [brigt[uch[f,4]]])+#13#10+
' Бригада 5: '+Format('%.4d',[brig[uch[f,5]]])+'/'+Format('%f', [brigt[uch[f,5]]])+#13#10+
' Бригада 6: '+Format('%.4d',[brig[uch[f,6]]])+'/'+Format('%f', [brigt[uch[f,6]]])+#13#10+
' Бригада 7: '+Format('%.4d',[brig[uch[f,7]]])+'/'+Format('%f', [brigt[uch[f,7]]])+#13#10+
' Бригада 8: '+Format('%.4d',[brig[uch[f,8]]])+'/'+Format('%f', [brigt[uch[f,8]]])+#13#10+
' Бригада 9: '+Format('%.4d',[brig[uch[f,9]]])+'/'+Format('%f', [brigt[uch[f,9]]])+#13#10+
'Бригада 10: '+Format('%.4d',[brig[uch[f,10]]])+'/'+Format('%f', [brigt[uch[f,10]]])+#13#10+
'Бригада 11: '+Format('%.4d',[brig[uch[f,11]]])+'/'+Format('%f', [brigt[uch[f,11]]])+#13#10+
'Бригада 12: '+Format('%.4d',[brig[uch[f,12]]])+'/'+Format('%f', [brigt[uch[f,12]]])+#13#10+
'Бригада 13: '+Format('%.4d',[brig[uch[f,13]]])+'/'+Format('%f', [brigt[uch[f,13]]]));
end;


aik   (2009-02-11 11:12:00) [30]


> Andrewtitoff ©   (11.02.09 11:01) [30]
> 2 ПлохишF8 - не помогает.., останавливается в процедуре
> procedure TForm1.Button3Click(Sender: TObject);


есть такая красная точечка которую можно поставить слева от первого бегина


> begin
> for n := 1 to 13 doBegin


нажав на синею точечку запустить программу нажать на кнопку и потом кликать на F8, F7 и следить где именно выходит ошибка


Германн   (2009-02-11 11:11:00) [31]


> Сергей М. ©   (11.02.09 11:09) [34]
>
>
> > п-ц... какой-то....
> >
>
>
> Дом-2
> Andrewtitoff ©   (11.02.09 11:09) [35]
>
> 2 Сергей М
> Дальше AV

Эт точно! Дурдом-2!


Ega23   (2009-02-11 11:11:00) [32]


> Дом-2


В "Доме" у некоторых участников хотя бы сиськи есть. А тут...


Сергей М.   (2009-02-11 11:10:00) [33]


> Andrewtitoff ©   (11.02.09 11:09) [35]



> Дальше AV


На какой строчке ?


Andrewtitoff   (2009-02-11 11:09:00) [34]

2 Сергей М
Дальше AV


Сергей М.   (2009-02-11 11:09:00) [35]


> п-ц... какой-то....
>


Дом-2


Плохиш   (2009-02-11 11:06:00) [36]


> Andrewtitoff ©   (11.02.09 11:01) [30]
>
> 2 Плохиш
> F8 - не помогает

Так он просто так не помогает, его прикормить и приласкать надо.

PS. Во всех версиях делфи имеется окошко Watch, в которое можно вывести значения каких-либо переменных.


Ega23   (2009-02-11 11:06:00) [37]

Это п-ц... какой-то....

Теперь по порядку.
1. Перепиши код без with. У тебя там вложенные встречаются, причём достаточно бездумно.
2. strtoint(Form1.ComboBox8.Text) и прочие подобные перлы должны быть вычеслены один раз. А по ходу уже значение вычесленной переменной использовать.
3. Код не просто ужасен, а (я даже слов таких не знаю). Короче, с вероятностью 0.999 в этом говнокоде никто разбираться не будет.


Сергей М.   (2009-02-11 11:04:00) [38]


> останавливается в процедуре


Это хорошо.
ну а дальше ?


Andrewtitoff   (2009-02-11 11:01:00) [39]

2 Плохиш
F8 - не помогает.., останавливается в процедуре procedure TForm1.Button3Click(Sender: TObject);


Andrewtitoff   (2009-02-11 11:00:00) [40]

И так на каждуй месяц


Страницы:   1 2 3 4

Наверх

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