2016-11-16 8 views
-2

Я делаю простую программу шифрования/дешифрования в Lazarus с 2 кнопками, один для шифрования и один для расшифровки. У меня также есть две записные коробки (или только две заметки). Я протестировал свой алгоритм, и он работает, но когда я попытался реализовать его в удобном для пользователя приложении, я получил эту проблему.Класс исключения 'Внешний: SIGSEGV'

У меня есть эта функция:

function enc(x:string):string; 
var 
    y:string; 
    p,q:integer; 
    m:char; 
begin 
y:=x[1]; 
for p:=2 to Length(x)do 
    begin 
     q:=p-1; 
     if chr(ord(x[p]))=' ' then 
      m:='!' 
      else if ord(x[p])>ord(x[q]) then 
        m:=Succ(chr(ord(x[p]))) 
         else 
          m:=Pred(chr(ord(x[p]))); 
     Y:=y+m ; 
    end; 
enc:=y; 
end; 

и одна процедура вызвать эту функцию

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Memo1.Text:=enc(Memo2.Text); 
end; 

Я составил программу, и она работала, но когда я пытался ввести текст и зашифровать этот текст я получил эта ошибка

класс исключения 'External: SIGSEGV'

В файле 'unit1.pas' в строке 46: y: = x [1];

Я недавно начал изучать паскаль и использовать lazarus soo sry, если это Q глупо, но я действительно хочу знать, что я делаю неправильно.

ответ

1

Эта ошибка для этого кода означает, что x - пустая строка. Если первый символ недопустим, то что еще может быть x, кроме пустого?

+0

Я действительно понял, в чем проблема. – anakata

+0

процедура TForm1.Button1Click (отправитель: TObject); begin Memo1.Text: = enc (Memo2.Text); конец; Этот фрагмент кода сделал мою программу прекращенной couse, я печатал текст в memo1, но с этим кодом я был suposed для ввода memo2, поэтому я только что заменил memo1 и memo2, и теперь все это хорошо работает – anakata

+0

Вот что я сказал вам в ответе. –

 Смежные вопросы

  • Нет связанных вопросов^_^