array som result fra function f***er
ARG!jeg har:
------------------------------------------
type
arrayofinteger = Array of Integer;
...blablabla
function KMPcompute(P:String):arrayofinteger;
var
m,k,q:Integer;
pi:arrayofinteger;
begin
ShowMessage('start');
SetLength(pi,Length(P));
m := Length(P);
pi[1] := 0;
k := 0;
For q:= 2 to m do;
begin
while (k>0) and (P[k+1] <> P[q]) do
k := pi[k];
if (P[k+1] = P[q])then
k := k+1;
pi[q] := k;
end;
Result := pi;
end;
function KMPpic(T:String;P:String):Integer;
var
found : boolean;
n,m,q,i:Integer;
pi:arrayofinteger;
begin
Result := -1;
found := false;
n := Length(T);
m := Length(P);
pi := KMPcompute(P);
q := 0;
i := 1;
While (i< n+1) and (found = false) do
begin
while (q>0) and (P[q+1] <> T[i]) and (found = false) do
q := pi[q];
if(P[q+1] = T[i])then
q := q+1;
if(found = true) then
ShowMessage('denne skulle ikke komme');
if(q = m)then
begin
found := true;
Result := i-m;
q := pi[q];
end;
i := i+1;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := IntToStr(KMPpic('sfakhsafjhsfaludehsfajsdluderhkfahjsfahfsa','luder'));
end;
-----------------------------
og det virker.
Men fjerner jeg ShowMessage('start') (eller sætter den efter SetLength(pi,Length(P));) går den helt i spåner med en:
EInvaliedPointer
hvad er det lige der sker? Og hvorfor må man ikke returnere arrays fra funktioner? ...