![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка "Access violation" после импортирования кода. [D7]
talim © (2011-06-19 11:49:00)procedure a1;
const
z:string='|\/ ,.#:;?!"-{}()_&';
var
ft,g:boolean;
b:char;
s:string ;
buf:string;
e,i,j,w,ns,ds,d,bufr:integer;
begin
ns:=1;
buf:='.';
ft:=true;
g:=true;
for e:=1 to form1.Memo1.Lines.Count do
begin
s:=Form1.Memo1.Lines[e-1];
d:=length(s);
s:=s+'.';
for i:=1 to d+1 do
for j:=1 to 21 do
if s[i]=z[j] then
begin
ds:=i-ns;
ns:=i+1;
if ds0 then
if ft=true then
begin
w:=i-1;
b:=s[w];
ft:=false;
Form1.ListBox1.Items.Add('Первое слово в тексте заканчивается на букву: ('+b+')');
end;
if ft=false then
begin
bufr:=ns-(ds+1);
buf:=copy(s,bufr,ds);
w:=length(buf);
if buf[w]=b then
if g=true then
begin
Form1.ListBox1.Items.Add('В данном тексте на ('+b+') заканчиваются слова:');
g:=false;
Form1.ListBox1.Items.Add(buf);
end
else
Form1.ListBox1.Items.Add(buf);
end;
end;
end;
end;
Loginov Dmitry (2011-06-19 14:53:00) [1]
> Сейчас приходится сопровождать проект написанный в током
> же стиле.
Да уж, участь незавидная :(
Имхо, лучше всего весь этот говнокод переписать с нуля, иначе разбираться и ловить глюки придется до пенсии. Самое сложное при этом - понять, что он вообще делает.
Loginov Dmitry (2011-06-19 14:49:00) [2]
>
> Или в каком направлении копать?
Строки в паскале содержали в нулевом символе длину. Обращение к нулевому байту было нормальной операцией. В Delphi строки string стали "длинными" и теперь обращение к нулевому символу не допускается. Попробуй объявить переменные не string, а ShortString, AV выдаваться перестанет. Но это совершенно не значит, что программа начнет правильно работать. Для этого как минимум нужен программист.
Отладчик тебе в помощь!
> Расстрелять за такой код.
Типичный код первокурсника, которому "седня сдавать нада", а задание препод "выдал только вчера".
Andy BitOff (2011-06-19 14:27:00) [3]Пипец!!! Расстрелять за такой код.
Навеяно собственными пиереживаниями. Сейчас приходится сопровождать проект написанный в током же стиле. Автор его наверняка обикался. Блин, да чтоб он сдох.
зы. Сорри, наболело.
Anatoly Podgoretsky (2011-06-19 13:08:00) [4]А почему не b1
talim (2011-06-19 11:55:00) [5]Код изначально был написан для Borland Packal (Все действия производились с одной строкой). После импортирования в Delphi 7 потребовалось добавить цикл на чтение строк по-порядку:
for e:=1 to form1.Memo1.Lines.Count do. Ошибка возникает вот здесьif buf[w]=b then. Кто-нить знает в чём может быть проблема? Или в каком направлении копать?