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

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

Ошибка "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. Кто-нить знает в чём может быть проблема? Или в каком направлении копать?


Наверх

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