|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.11.2007, 02:08 | #1 |
Регистрация: 01.11.2007
Сообщений: 4
|
Access violation at address..
Наверно буду глупо выглядеть со своим вопросом. Уже почти три часа не могу понять в чем проблема. Почему при запуске выдает ошибку:
Access violation at address 00461005 in module 'Project.exe' Write of address 6239F66F. Проверил пошагово. Ошибку выдает после отработки findkiqi сразу по завершении, в чем ошибка понять не могу. Заранее спасибо за помощь Procedure findkiqi (x:keytype; var k:keyroundtype; var q:qroundtype); var bb:keytype; i:integer; B:typeB; begin for i:=0 to 15 do bb[i]:=x[i]; for i:=0 to 15 do begin B[0].x[i]:=bb[i]; B[1].x[i+4]:=bb[i+4]; B[2].x[2*i+4]:=bb[2*i+4]; B[3].x[3*i+4]:=bb[3*i+4] end; for i:=0 to 1 do begin B[4].a:=B[0].a xor S(S5[B[3].x[1]].A,S6[B[3].x[3]].A,S7[B[3].x[0]].A,S8[B[3].x[2]].A) xor S7[B[2].x[0]].A; B[5].a:=B[2].a xor S(S5[B[4].x[0]].A,S6[B[4].x[2]].A,S7[B[4].x[1]].A,S8[B[4].x[3]].A) xor S8[B[2].x[2]].A; B[6].a:=B[3].a xor S(S5[B[5].x[3]].A,S6[B[5].x[2]].A,S7[B[5].x[1]].A,S8[B[5].x[0]].A) xor S5[B[2].x[1]].A; B[7].a:=B[1].a xor S(S5[B[6].x[2]].A,S6[B[6].x[1]].A,S7[B[6].x[3]].A,S8[B[6].x[0]].A) xor S6[B[2].x[3]].A; k[1+16*i]:= S(S5[B[6].x[0]].A,S6[B[6].x[1]].A,S7[B[5].x[3]].A,S8[B[5].x[2]].A) xor S5[B[4].x[2]].A; k[2+16*i]:= S(S5[B[6].x[2]].A,S6[B[6].x[3]].A,S7[B[5].x[1]].A,S8[B[5].x[0]].A) xor S6[B[5].x[2]].A; k[3+16*i]:= S(S5[B[7].x[0]].A,S6[B[7].x[1]].A,S7[B[4].x[3]].A,S8[B[4].x[2]].A) xor S7[B[6].x[1]].A; k[4+16*i]:= S(S5[B[7].x[2]].A,S6[B[7].x[3]].A,S7[B[4].x[1]].A,S8[B[4].x[0]].A) xor S8[B[7].x[0]].A; ...//все аналогично B[4].a:=B[0].a xor S(S5[B[3].x[1]].A,S6[B[3].x[3]].A,S7[B[3].x[0]].A,S8[B[3].x[2]].A) xor S7[B[2].x[0]].A; B[5].a:=B[2].a xor S(S5[B[4].x[0]].A,S6[B[4].x[2]].A,S7[B[4].x[1]].A,S8[B[4].x[3]].A) xor S8[B[2].x[2]].A; B[6].a:=B[3].a xor S(S5[B[5].x[3]].A,S6[B[5].x[2]].A,S7[B[5].x[1]].A,S8[B[5].x[0]].A) xor S5[B[2].x[1]].A; B[7].a:=B[1].a xor S(S5[B[6].x[2]].A,S6[B[6].x[1]].A,S7[B[6].x[3]].A,S8[B[6].x[0]].A) xor S6[B[2].x[3]].A; k[9+16*i] := S(S5[B[4].x[3]].A,S6[B[4].x[2]].A,S7[B[7].x[0]].A,S8[B[7].x[1]].A) xor S5[B[6].x[1]].A; k[10+16*i]:= S(S5[B[4].x[1]].A,S6[B[4].x[0]].A,S7[B[7].x[2]].A,S8[B[7].x[3]].A) xor S6[B[7].x[0]].A; k[11+16*i]:= S(S5[B[5].x[3]].A,S6[B[5].x[2]].A,S7[B[6].x[0]].A,S8[B[6].x[1]].A) xor S7[B[4].x[2]].A; k[12+16*i]:= S(S5[B[5].x[1]].A,S6[B[5].x[0]].A,S7[B[6].x[2]].A,S8[B[6].x[3]].A) xor S8[B[5].x[2]].A; B[0].a:=B[6].a xor S(S5[B[5].x[1]].A,S6[B[5].x[3]].A,S7[B[5].x[0]].A,S8[B[5].x[2]].A) xor S7[B[4].x[0]].A; B[1].a:=B[4].a xor S(S5[B[0].x[0]].A,S6[B[0].x[2]].A,S7[B[0].x[1]].A,S8[B[0].x[3]].A) xor S8[B[4].x[2]].A; B[2].a:=B[5].a xor S(S5[B[1].x[3]].A,S6[B[1].x[2]].A,S7[B[1].x[1]].A,S8[B[1].x[0]].A) xor S5[B[4].x[1]].A; B[3].a:=B[7].a xor S(S5[B[2].x[2]].A,S6[B[2].x[1]].A,S7[B[2].x[3]].A,S8[B[2].x[0]].A) xor S6[B[4].x[3]].A; k[13+16*i]:= S(S5[B[2].x[0]].A,S6[B[2].x[1]].A,S7[B[1].x[3]].A,S8[B[1].x[2]].A) xor S5[B[0].x[3]].A; k[14+16*i]:= S(S5[B[2].x[2]].A,S6[B[2].x[3]].A,S7[B[1].x[1]].A,S8[B[1].x[0]].A) xor S6[B[1].x[3]].A; k[15+16*i]:= S(S5[B[3].x[0]].A,S6[B[3].x[1]].A,S7[B[0].x[3]].A,S8[B[0].x[2]].A) xor S7[B[2].x[0]].A; k[16+16*i]:= S(S5[B[3].x[2]].A,S6[B[3].x[3]].A,S7[B[0].x[1]].A,S8[B[0].x[0]].A) xor S8[B[3].x[1]].A; end; for i:= 1 to 16 do q[i]:=k[16+i] mod 32; end; //тут ошибка procedure mainzachifr (var text:block64; x:keytype); var i:integer; help:longword;k:keyroundtype;q:qrou ndtype; begin findkiqi(x,k,q); for i:=1 to 16 do begin text.L:=text.L xor round(text.R, k[i],q[i],i); help:=text.L; text.L:=text.R; text.R:=help; end end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var x:keytype; ss:string;i:integer;text:block64; begin ss:= Edit2.Text; for i:=1 to 16 do begin x[i-1]:=strtoword(ss[i]); end; ss:=Edit1.Text; text.L:=strtoword(ss[1]+ss[2]+ss[3]+ss[4]); text.R:=strtoword(ss[5]+ss[6]+ss[7]+ss[8]); loadsi(); mainzachifr(text,x); Edit3.Enabled:=true; Edit3.Text:=wordtostr(text.L)+wordt ostr(text.R); end; |
01.11.2007, 02:20 | #2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Надо было бы привести объявления переменных...
Ладно, попробуем так - ставим точку останова на строке Код:
|
01.11.2007, 02:25 | #3 | |
Регистрация: 01.11.2007
Сообщений: 4
|
Нет, все q[i] высчитывает, дело не в размерности
После завершения этого цикла выходит на строчку помеченную красным(end) и после этого виснет. на всякий случай: Цитата:
|
|
01.11.2007, 03:21 | #4 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Ну, тогда ничего не остается, как идти методом последовательного исключения.
Для начала закомментируйте вот этот кусок: for i:= 1 to 16 do q[i]:=k[16+i] mod 32; и посмотрите, будет ли сбой. Если ошибка будет наличествовать, комменты дальше вверх... |
01.11.2007, 03:46 | #5 |
Регистрация: 01.11.2007
Сообщений: 4
|
Спасибо. Удалось найти ошибку.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Access Violation | SunKnight | Общие вопросы Delphi | 2 | 05.06.2008 16:46 |
Ошибка: "Access violation at address 00454F01 in module 'Project1.exe'. Read of address 00000000. | Fen1x | Общие вопросы Delphi | 8 | 13.10.2007 20:13 |
Access Violation | Carbon | Общие вопросы Delphi | 12 | 18.09.2007 19:55 |
Возникает исключение "Access violation at address ... | Наташка | Общие вопросы Delphi | 1 | 18.05.2007 12:16 |