Einzelnen Beitrag anzeigen

WhiteStar99

Registriert seit: 21. Sep 2003
Ort: Hanau
6 Beiträge
 
Delphi 5 Professional
 
#1

Suchalgorithmus -> Ungültige Zeigeroperation

  Alt 21. Sep 2003, 10:29
Hallo!

ich weiß echt nimmer weiter mit meinem Programm, hier mal der Quellcode:

Delphi-Quellcode:
function TForm1.BinSuche(Key,laenge : Integer):integer;
var
   A, E : integer;
   M : integer;
   i : integer;
   feld : array of integer;
begin

// array füllen
setlength(feld, laenge);
for i:=0 to (laenge) do
  feld[i]:=strtoint(lb1.items.strings[i]);

// such algorithmus
A := 1;
E := length(feld)+1;
while A < E do begin
  M := (A + E) div 2;
  if Key > feld[M] then
    A := M+1
  else
    E := M;
end;
if (feld[E] = Key) then result := E else result := 0;

end;
Delphi-Quellcode:
procedure TForm1.BSuchenClick(Sender: TObject);
var Ergebnis, laenge : integer;
begin
laenge:= strtoint(EEnde.text)-strtoint(EAnfang.text);
//function aufrufen, result in Ergebnis speichern
Ergebnis:=BinSuche(StrToInt(EKey.Text),laenge);
EErgebnis.text:=inttostr(Ergebnis);
end;

procedure TForm1.BGenerierenClick(Sender: TObject);
var i, anfang,laenge : integer;
    feld: array of integer;
begin
anfang:=strtoint(EAnfang.text);
laenge:= strtoint(EEnde.text)-strtoint(EAnfang.text);
setlength(feld, laenge);

// stringlist füllen
  for i:=0 to (laenge) do begin
    feld[i]:=anfang;
    inc(anfang);
    lb1.items.strings[i]:=inttostr(feld[i]);
  end;

end;
das Programm hat 4 Eingabefehler, 3 davon muss man ausfüllen, Einmal Anfang für einen Startwert (zB 10), ein Ende zB 50 und ein Key (zu suchende Zahl).

Bsp:
Anfang 10, Ende 50 --> StringList 10,11,12,13,..,50
Key: 12

Ergebnis müsste 2 sein (da Index mit 0 beginnend).

Das Problem ist, dass das Programm ständig mit "Ungültige Zeigeroperation" aussteigt. Wenn ich als Bsp 20 und 50 nehme, dann klappt das Programm ohne den Fehler, bringt aber nach Schließung einen Zugriffsverletzungs-Fehler.

Ich weiß echt nicht mehr weiter, voralllem ist diese Ungültige Zeigeroperation Fehlermeldung für mich so nichtssagend. Sie kommt sogar, wenn ich im Quellcode in der function die variable result manuell auf 12 stelle.

Habe das Programm mal hier hochgeladen

Wäre für jede Hilfe dankbar!

Gruß
  Mit Zitat antworten Zitat