Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 01.11.2007, 02:08   #1
RegentM
 
Регистрация: 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;
RegentM вне форума Ответить с цитированием
Старый 01.11.2007, 02:20   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Надо было бы привести объявления переменных...
Ладно, попробуем так - ставим точку останова на строке
Код:
*for i:= 1 to 16 do
 q[i]:=k[16+i] mod 32;
 end;
и проходим цикл ручками, смотрим, на каком I возникает ошибка. Похоже, дело в размерности Q[I].
mihali4 вне форума Ответить с цитированием
Старый 01.11.2007, 02:25   #3
RegentM
 
Регистрация: 01.11.2007
Сообщений: 4
По умолчанию

Нет, все q[i] высчитывает, дело не в размерности
После завершения этого цикла выходит на строчку помеченную красным(end) и после этого виснет.
на всякий случай:

Цитата:
keyroundtype = array[1..32] of longword; // тип для k
qroundtype = array[1..16] of longword; //тип для q
RegentM вне форума Ответить с цитированием
Старый 01.11.2007, 03:21   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну, тогда ничего не остается, как идти методом последовательного исключения.
Для начала закомментируйте вот этот кусок:
for i:= 1 to 16 do
q[i]:=k[16+i] mod 32;
и посмотрите, будет ли сбой.
Если ошибка будет наличествовать, комменты дальше вверх...
mihali4 вне форума Ответить с цитированием
Старый 01.11.2007, 03:46   #5
RegentM
 
Регистрация: 01.11.2007
Сообщений: 4
По умолчанию

Спасибо. Удалось найти ошибку.
RegentM вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access Violation SunKnight Общие вопросы Delphi 2 05.06.2008 15:46
Ошибка: "Access violation at address 00454F01 in module 'Project1.exe'. Read of address 00000000. Fen1x Общие вопросы Delphi 8 13.10.2007 19:13
Access Violation Carbon Общие вопросы Delphi 12 18.09.2007 18:55
Возникает исключение "Access violation at address ... Наташка Общие вопросы Delphi 1 18.05.2007 11:16


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя