2016-11-16 77 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; 

我编译的程序和它的工作,但是当我试图进入一些文本和加密文本我有此错误

异常类'外部:SIGSEGV'

在第46行的文件'unit1.pas'中:y:= x [1];

我最近开始学习pascal并使用lazarus soo sry,如果这个Q是愚蠢的,但我真的想知道我做错了什么。

回答

1

该错误代码暗示x是一个空字符串。如果第一个字符无效,那么除了空之外,还有什么其他的可以使用?

+0

我真的意识到问题所在。 – anakata

+0

procedure TForm1.Button1Click(Sender:TObject); begin Memo1.Text:= enc(Memo2.Text); 结束; 那段od代码让我的程序停止了couse我正在将文本输入到备忘录1中,但是随着该代码我被键入memo2,所以我只是取代了memo1和memo2,现在everythink很好运行 – anakata

+0

这就是我在答案中告诉你的。 –