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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2011, 21:12   #1
ms.Karishka
 
Регистрация: 26.03.2011
Сообщений: 3
Печаль Ошибка "Access violation at address 004043A8 in module 'Project1.exe'. Read of address 00FF5A53."

Здравствуйте! Я не сильно разбираюсь в Делфи, делала большой проект и на последней части при нажатии кнопки выходит такая ошибка. Функция:
Вообще он считывает из заполненной таблицы знак и относительно него производит какое либо действие, описанное в функции. Вся программы очень большая.. я не знаю что делать

procedure TForm1.Button2Click(Sender: TObject);
var i,j,k,x,y,l,m,len,num,p,r:integer;
lec,res,svalue,lastterm,current_rul e,current_stek,pravila:string;
flag:boolean;
stek:array[0..1,0..100] of string;
rule:array[0..19] of string;
usedrules: array of integer;
lecsem:array[0..100] of string;
dopID:array[0..100] of string;
dopKon:array[0..100] of string;
ZZ,ZZ1,A1,A2,A,A4,A3,TekVer:TTreeNo de;
begin
pravila:='';
TreeView1.Items.Clear;
stek[0,0]:='t';
stek[1,0]:='*H';
rule[0] := 'progFend.;';
rule[1] := 'F;F';
rule[2] := 'if(F)thenFelseFendif';
rule[3] := 'if(F)thenFendif';
rule[4] := 'beginFend';
rule[5] := 'forFtodoF';
rule[6] := 'forFdowntoFdo';
//итд//
num:=0;
SetLength(usedrules, 0);
i:=1;
j:=0;
p:=0;
r:=0;
while StringGrid4.cells[1,i]<>' ' do
begin
lecsem[i-1]:=StringGrid4.cells[1,i];
i:=i+1;
end;
lecsem[i-1]:='*K';
while (lec<>'*K') or (num<>1) or (stek[1,1]<>'F') do
begin
x:=1;y:=1;flag:=false;
lec:=lectype(lecsem[j]);
if lec='a' then begin
dopID[p]:=lecsem[j];
p:=p+1;
end;
if lec='c' then begin
dopKon[r]:=lecsem[j];
r:=r+1;
end;
k:=num;
while stek[0,k]<>'t' do
begin
k:=k-1;
end;
lastterm:= stek[1,k];
while lastterm<>StringGrid3.Cells[0,y] do y:=y+1;
while lec<>StringGrid3.Cells[x,0] do x:=x+1;
res:=StringGrid3.Cells[x,y];
if res='' then begin MessageDlg(Некорректная конструкция предложения!!!',mtWarning,[mbOk],0); break; end;
if (res='<.') or (res='=.') then
begin
num:=num+1;
stek[0,num] := 't';
stek[1,num] := lec;
j:=j+1;
end
else
begin
current_stek := '';
for l:=num downto 0 do //ïåðåáèðàåì çàïèñè ñòåêà (îáúåäèíÿÿ èõ)
begin
current_stek := stek[1,l] + current_stek;
for k:=0 to 19 do
begin
current_rule := rule[k];
if current_stek=current_rule then
begin
if flag=false then
begin
flag := true;
len := length(usedrules);
SetLength(usedrules, len +1);
usedrules[len] := k;
num := l;
end
else
begin
len := length(usedrules);
usedrules[len-1] := k;
num := l;
end;
end;
end;
end;
stek[0,num] := 'n';
stek[1,num] := 'F';
if flag = false then begin MessageDlg('Некорректная конструкция предложения!!!',mtWarning,[mbOk],0);break; end;
end;
end;
TekVer:=TreeView1.Items.Add(nil,'F' );
for m:= length(usedrules)-1 downto 0 do
begin
pravila:=pravila+inttostr(usedrules[m])+' ';
//memo2.Lines.Add(pravila);
case usedrules[m] of
0: begin A1:=TreeView1.Items.AddChild(TekVer ,'prog');ZZ:=TreeView1.Items.AddChi ld(TekVer,'F');A:=TreeView1.Items.A ddChild(TekVer,'end.');end;
//и т д//
end;
if (usedrules[m]=18) or (usedrules[m]=19) then TekVer:=ZZ1 else TekVer:=ZZ;
end;
MessageDlg('Использованные правила: '+pravila,mtInformation,[mbOk],0);
end;

Вообще если кто сможет мне помочь я бы была очень признательна, возможна помощь за вознаграждение.
ms.Karishka вне форума Ответить с цитированием
Старый 14.04.2011, 21:16   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

1. Оформите код(), тогда будет понятно что текст а что код.

2. Попробуйте подключить MadExcept.
Человек_Борща вне форума Ответить с цитированием
Старый 14.04.2011, 21:36   #3
ms.Karishka
 
Регистрация: 26.03.2011
Сообщений: 3
По умолчанию

помоги мне пожалуйста я не соображаю :D я тебе в асю написала в обе :DDD
моя 193473639

Последний раз редактировалось ms.Karishka; 14.04.2011 в 21:43.
ms.Karishka вне форума Ответить с цитированием
Старый 14.04.2011, 21:44   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Выделяешь вставленныю тобою в сообщение ко, тыкашь на кнопочку

p.S. отписался...

Последний раз редактировалось Человек_Борща; 14.04.2011 в 21:47.
Человек_Борща вне форума Ответить с цитированием
Старый 14.04.2011, 21:49   #5
ms.Karishka
 
Регистрация: 26.03.2011
Сообщений: 3
По умолчанию

Здравствуйте! Я не сильно разбираюсь в Делфи, делала большой проект и на последней части при нажатии кнопки выходит такая ошибка. Функция:
Вообще он считывает из заполненной таблицы знак и относительно него производит какое либо действие, описанное в функции. Вся программы очень большая.. я не знаю что делать
Код:
procedure TForm1.Button2Click(Sender: TObject);
var i,j,k,x,y,l,m,len,num,p,r:integer;
lec,res,svalue,lastterm,current_rul e,current_stek,pravila:string;
flag:boolean;
stek:array[0..1,0..100] of string;
rule:array[0..19] of string;
usedrules: array of integer;
lecsem:array[0..100] of string;
dopID:array[0..100] of string;
dopKon:array[0..100] of string;
ZZ,ZZ1,A1,A2,A,A4,A3,TekVer:TTreeNo de;
begin
pravila:='';
TreeView1.Items.Clear;
stek[0,0]:='t';
stek[1,0]:='*H';
rule[0] := 'progFend.;';
rule[1] := 'F;F';
rule[2] := 'if(F)thenFelseFendif';
rule[3] := 'if(F)thenFendif';
rule[4] := 'beginFend';
rule[5] := 'forFtodoF';
rule[6] := 'forFdowntoFdo';
//итд//
num:=0;
SetLength(usedrules, 0);
i:=1;
j:=0;
p:=0;
r:=0;
while StringGrid4.cells[1,i]<>' ' do
begin
lecsem[i-1]:=StringGrid4.cells[1,i];
i:=i+1;
end;
lecsem[i-1]:='*K';
while (lec<>'*K') or (num<>1) or (stek[1,1]<>'F') do
begin
x:=1;y:=1;flag:=false;
lec:=lectype(lecsem[j]);
if lec='a' then begin
dopID[p]:=lecsem[j];
p:=p+1;
end;
if lec='c' then begin
dopKon[r]:=lecsem[j];
r:=r+1;
end;
k:=num;
while stek[0,k]<>'t' do	
begin
k:=k-1;
end;
lastterm:= stek[1,k];
while lastterm<>StringGrid3.Cells[0,y] do y:=y+1;
while lec<>StringGrid3.Cells[x,0] do x:=x+1;
res:=StringGrid3.Cells[x,y];
if res='' then begin MessageDlg(Некорректная конструкция предложения!!!',mtWarning,[mbOk],0); break; end;
if (res='<.') or (res='=.') then
begin
num:=num+1;	
stek[0,num] := 't';
stek[1,num] := lec;
j:=j+1;
end
else
begin
current_stek := '';
for l:=num downto 0 do	 //ïåðåáèðàåì çàïèñè ñòåêà (îáúåäèíÿÿ èõ)
begin
current_stek := stek[1,l] + current_stek;	
for k:=0 to 19 do	
begin
current_rule := rule[k];
if current_stek=current_rule then
begin
if flag=false then
begin
flag := true;
len := length(usedrules);
SetLength(usedrules, len +1);
usedrules[len] := k;	
num := l;	
end
else
begin
len := length(usedrules);
usedrules[len-1] := k;
num := l;
end;
end;
end;
end;
stek[0,num] := 'n';	
stek[1,num] := 'F';
if flag = false then begin MessageDlg('Некорректная конструкция предложения!!!',mtWarning,[mbOk],0);break; end;
end;
end;
TekVer:=TreeView1.Items.Add(nil,'F' );
for m:= length(usedrules)-1 downto 0 do
begin
pravila:=pravila+inttostr(usedrules[m])+' ';
//memo2.Lines.Add(pravila);
case usedrules[m] of
0: begin A1:=TreeView1.Items.AddChild(TekVer ,'prog');ZZ:=TreeView1.Items.AddChi ld(TekVer,'F');A:=TreeView1.Items.A ddChild(TekVer,'end.');end;
//и т д//
end;
if (usedrules[m]=18) or (usedrules[m]=19) then TekVer:=ZZ1 else TekVer:=ZZ;
end;
MessageDlg('Использованные правила: '+pravila,mtInformation,[mbOk],0);
end;
Вообще если кто сможет мне помочь я бы была очень признательна, возможна помощь за вознаграждение.
ms.Karishka вне форума Ответить с цитированием
Старый 14.04.2011, 22:18   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Делай раз.
Делай два.

Если делать не охота, то надо за деньги.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 14.04.2011, 22:18   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

всё равно такая каша... удавиться ведь можно... Вы чтоли взяли программу на паскале и впихнули её в 1 обработчик клика по кнопке ??

чтобы мы Вам могли помочь вы скиньте весь код проектом (заархивируйте папочку со всем кодом и вложением на форум кидайте) и укажите на какой строчке кода дельфи указывает ошибку и действия которые к этому приводят

Вроде по замыслу программы и по прикидкам, Вы где-то косячите с памятью, у вас есть дин массив, может выходите за его пределы (ошибка - про считывание памяти в "середине"), или ещё что-то такое
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка: " class EAccessViolatiossViolation with n with message 'Access violation at address 0052D1D5..." lutdan Помощь студентам 4 02.04.2011 04:29
Access violation at address 00447E73 in modul Project.exe. Read of address 00000057. ArtGrek Общие вопросы Delphi 40 12.03.2011 22:03
Access violation at address 00478D0E in module 'Project1.exe'. Write of address 00000000 fondreykus-1 Общие вопросы Delphi 5 27.01.2010 14:25
Access violation at address 00456215 in module Autorun.exe. alexandrov28 Свободное общение 4 30.09.2009 21:41
Ошибка: "Access violation at address 00454F01 in module 'Project1.exe'. Read of address 00000000. Fen1x Общие вопросы Delphi 8 13.10.2007 20:13