2016-11-16 78 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

這就是我在答案中告訴你的。 –