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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2008, 17:13   #1
RealSHELS
Форумчанин
 
Аватар для RealSHELS
 
Регистрация: 04.03.2008
Сообщений: 176
Вопрос Непонятная ошибка

Может кто знает, что значит эта ошибка? И как от неё избавиться?
Изображения
Тип файла: jpg фіфі.jpg (11.2 Кб, 164 просмотров)
RealSHELS вне форума Ответить с цитированием
Старый 24.10.2008, 17:34   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
что значит эта ошибка
Похоже на обращение к уничтоженному (или еще не созданному) объекту. Пройдитесь по шагам и посмотрите, что там у вас NIL или NOT ASSIGNED.
А останов после какой строки происходит? Приведите кусок кода, захватив пару строк до и после точки останова.
mihali4 вне форума Ответить с цитированием
Старый 24.10.2008, 17:41   #3
RealSHELS
Форумчанин
 
Аватар для RealSHELS
 
Регистрация: 04.03.2008
Сообщений: 176
По умолчанию

Код:
procedure obrdel(a:byte; kilel:integer);
var ap,ad,sym:char;
i,p,d:byte;
duj:boolean;
ch:string;
begin
  for i:=a to length(s) do
    if (s[i]='a') or (s[i]='b') or (s[i]='c') or (s[i]='d') or inc(s[i],i)
      or (s[i]='e') or (s[i]='f')
      then
       begin
         ad:=s[i];
         d:=i;
         break;
       end;
  for i:=a downto 1 do
     if (s[i]='a') or (s[i]='b') or (s[i]='c') or (s[i]='d') or inc(s[i],i)
         or (s[i]='e') or (s[i]='f')
     then
       begin
         ap:=s[i];
         p:=i;
         break;
       end;
  duj:=false;
  if (asd[d+1]=6) and ((asd[p-1]=5) or (asd[p-2]=5)) then duj:=true;
  showmessage('pered '+ap+' '+ad+' '+inttostr(kilel)+' '+inttostr(p)+' '+inttostr(d)+' '+s[a]);
 sym:=twoand(ap,ad,p,d,duj,s[a],kilel);// Delphi указывает что здесь ошибка
  if s[p-1]='-' then p:=p-1;
  if duj then
    begin
      p:=p-1;
      d:=d+1;
    end;
  if s[p-1]='-' then p:=p-1;
  str(dopzn-1,ch);
  superdel(p,d);
  superinsert(ch,p);
  delete(s,p,d-p+1);
  insert(sym,s,p);
  ochmas;
  zapovn_mas;
  if length(s)>1 then
     begin
        main.ListBox2.Items.Add('After spr:'+sb);
        writeln(fil,'After spr:',sb);
     end;
end;
оно работает если kilel<5 если kilel>=5 то вылетает вот эта ошибка.

Последний раз редактировалось RealSHELS; 24.10.2008 в 17:45.
RealSHELS вне форума Ответить с цитированием
Старый 24.10.2008, 18:02   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Называется "зашибись"
Весь код, который вы привели, ничего не дает, ведь ошибка в вашей процедуре twoand, а про нее вы - ни слова...
mihali4 вне форума Ответить с цитированием
Старый 24.10.2008, 18:05   #5
RealSHELS
Форумчанин
 
Аватар для RealSHELS
 
Регистрация: 04.03.2008
Сообщений: 176
По умолчанию

Код:
function twoand(a,b:char; p,d:integer; du:boolean; op:char; kil:integer):char;
var i,st1,st2,prst,minus:integer;
d1,d2,pm,dm,pp1,pp2:string;
ms1:char;
ms2:string;
begin
   d1:=''; d2:=''; pm:=''; dm:=''; pp1:=''; pp2:='';
   st1:=verstvp1(a,kil);
   st2:=verstvp1(b,kil);
   for i:=1 to kilzn do
     begin
       mas_buf_1[i]:=mas_16x4[i,st1];
       mas_buf_2[i]:=mas_16x4[i,st2];
       if s[p-1]='-' then
            begin
               mas_buf_1[i]:=not mas_buf_1[i];
               pm:='-';
               pp1:=' ';
            end;
       if s[d-1]='-' then
           begin
             mas_buf_2[i]:=not mas_buf_2[i];
             dm:='-';
             pp2:=' ';
           end;
       case op of
       '*':mas_buf_1[i]:=mas_buf_1[i] and mas_buf_2[i];
       '+':mas_buf_1[i]:=mas_buf_1[i] or mas_buf_2[i];
       '@':mas_buf_1[i]:=mas_buf_1[i] xor mas_buf_2[i];
       '=':mas_buf_1[i]:=not (mas_buf_1[i] xor mas_buf_2[i]);
       '>':mas_buf_1[i]:=imp(mas_buf_1[i],mas_buf_2[i]);
       end;
     end;
       minus:=2;
       if du and (s[p-1]<>'-') then minus:=1;
       if du
         then
           begin
            d1:='(';
            pp2:=pp2+' ';
            d2:=')';
            pp1:=pp1+' ';
           end;
       if du and ((s[p-minus]='-') or (s[p-1-minus]='-')) then
          begin
            for i:=1 to kilzn do
            mas_buf_1[i]:=not mas_buf_1[i];
            d1:='-'+d1;
            pp1:=pp1+' ';
          end;
    if (st1<11) or (st2<11) then
      if (st1<11) and (st2<11)
          then
           begin
            if st1>st2 then
                 begin
                    prst:=st2;
                    mas_16x4[65,st1]:=false;
                 end
                  else
                    begin
                      prst:=st1;
                      mas_16x4[65,st2]:=false;
                    end;
           end
          else
          if st1<11 then prst:=st1 else
              begin
                 prst:=st2;
              end
   else
     for i:=1 to 10 do
       if not mas_16x4[65,i] then
         begin
           prst:=i;
           mas_16x4[65,i]:=true;
           break;
         end;
     if st1<11 then
         if st2<11 then
             begin
               if maszn[st1]-1>9 then pp1:=pp1+' ';
               if maszn[st2]-1>9 then pp2:=pp2+' ';
               ms2:=d1+pm+inttostr(maszn[st1]-1)+op+dm+inttostr(maszn[st2]-1)+d2;
               mass[0]:=mass[0]+' '+ms2;
               ms2:=inttostr(nomop)+'='+ms2;
               writeln(fil,ms2);
               main.ListBox2.Items.Add(ms2);
             end
          else
            begin
              if maszn[st1]-1>9 then pp1:=pp1+' ';
              ms2:=d1+pm+inttostr(maszn[st1]-1)+op+dm+b+d2;
              mass[0]:=mass[0]+' '+ms2;
              ms2:=inttostr(nomop)+'='+ms2;
              main.ListBox2.Items.Add(ms2);
              writeln(fil,ms2);
            end
          else
            if st2<11 then
              begin
                if maszn[st2]-1>9 then pp2:=pp2+' ';
                ms2:=d1+pm+a+op+dm+inttostr(maszn[st2]-1)+d2;
                mass[0]:=mass[0]+' '+ms2;
                ms2:=inttostr(nomop)+'='+ms2;
                 main.ListBox2.Items.Add(ms2);
                writeln(fil,ms2);
              end
            else
              begin
                ms2:=d1+pm+a+op+dm+b+d2;
                mass[0]:=mass[0]+' '+ms2;
                ms2:=inttostr(nomop)+'='+ms2;
                 main.ListBox2.Items.Add(ms2);
                writeln(fil,ms2);
              end;
    for i:=1 to kilzn do
      begin
           mas_16x4[i,prst]:=mas_buf_1[i];
           if mas_buf_1[i] then
                  mass[i]:=mass[i]+pp1+'  1 '+pp2
                 else
                  mass[i]:=mass[i]+pp1+'  0 '+pp2;
      end;
    case prst of
      1:ms1:='q';
      2:ms1:='w';
      3:ms1:='r';
      4:ms1:='t';
      5:ms1:='y';
      6:ms1:='u';
      7:ms1:='i';
      8:ms1:='o';
      9:ms1:='p';
      10:ms1:='z';
    end;
    twoand:=ms1;
    nomop:=nomop+1;
    maszn[prst]:=nomop;
    dopzn:=maszn[prst];
end;
вот и функция twoand
Тут просто в чем прикол, на Borland Pascal 7.0 оно работает на ура, а на делфи не хочет.
RealSHELS вне форума Ответить с цитированием
Старый 24.10.2008, 18:24   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

М-м-да-а... Так дело не пойдет.
Вам придется самому в шаге пройти эту процедуру и поймать место с ошибкой. А оно может оказаться и внутри процедуры verstvp1... А в ней окажутся ссылки еще на какие-то процедуры...
Так что, если в процессе трассировки попали на строку с вызовом процедуры, переходите с F8 на F7.
Короче - темный лес и только вы способны в этом разобраться.
Направление поиска и способ я вам подсказал. Так что - успехов! Не забудьте отписаться, ы чем оказалось дело. Наверняка какая-нибудь ерунда, типа опечатки...
mihali4 вне форума Ответить с цитированием
Старый 24.10.2008, 18:32   #7
RealSHELS
Форумчанин
 
Аватар для RealSHELS
 
Регистрация: 04.03.2008
Сообщений: 176
По умолчанию

спс за совет
RealSHELS вне форума Ответить с цитированием
Старый 24.10.2008, 19:02   #8
RealSHELS
Форумчанин
 
Аватар для RealSHELS
 
Регистрация: 04.03.2008
Сообщений: 176
По умолчанию

Ой, чувак. Огромное тебе спасибо. Нашол ошибку. Тоесть не ошибку а черт знает что. Просто почему-то глобальная переменная kilzn с 32 почему-то сама стала 1677789012. Но почему я не знаю.
RealSHELS вне форума Ответить с цитированием
Старый 24.10.2008, 19:05   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
глобальная переменная kilzn с 32 почему-то сама стала 1677789012. Но почему я не знаю
Похоже, что вы глобальную переменную еще раз объявили в какой-то процедуре как локальную, а значение ей не присвоили...
mihali4 вне форума Ответить с цитированием
Старый 24.10.2008, 19:22   #10
RealSHELS
Форумчанин
 
Аватар для RealSHELS
 
Регистрация: 04.03.2008
Сообщений: 176
По умолчанию

Я как локальную её не обьявлял.
Ладно проехали. Но вот еще нашел один прикол
Код:
for i:=1 to round(exp(ln(2)*kil)) do
     begin
       mas_buf_1[i]:=mas_16x4[i,st1];
       mas_buf_2[i]:=mas_16x4[i,st2];
       if s[p-1]='-' then
            begin
               mas_buf_1[i]:=not mas_buf_1[i];
               pm:='-';
               pp1:=' ';
            end;
       if s[d-1]='-' then
           begin
             mas_buf_2[i]:=not mas_buf_2[i];
             dm:='-';
             pp2:=' ';
           end;
       case op of
       '*':mas_buf_1[i]:=mas_buf_1[i] and mas_buf_2[i];
       '+':mas_buf_1[i]:=mas_buf_1[i] or mas_buf_2[i];
       '@':mas_buf_1[i]:=mas_buf_1[i] xor mas_buf_2[i];
       '=':mas_buf_1[i]:=not (mas_buf_1[i] xor mas_buf_2[i]);
       '>':mas_buf_1[i]:=imp(mas_buf_1[i],mas_buf_2[i]);
       end;
       showmessage(inttostr(i)+' '+inttostr(nomop));
     end;
И вот кароче в этом цикле образовывается черная дыра.
Перед входом в цыкл nomop равно 1. Но когда в этом цыкле і стает 21 то nomop внезапно стает равным 0. Вопрос: почему?
RealSHELS вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Nero - ошибка драйвера DMA. ошибка CRC NecRoMat Софт 5 09.05.2012 01:29
Ошибка Devourer12345 Microsoft Office Access 2 10.08.2008 20:24
Непонятная ошибка!!! Delphi Dimon88 Помощь студентам 7 06.05.2008 00:14
Непонятная ошибка Slash Общие вопросы Delphi 6 19.06.2007 14:45