![]() |
programmfehler bei selectionsort
hiho
ich soll ein programm schreiben welches die geschwindigkeit von sortieralgorythmen vergleicht. bis jetzt bin ich am teil von selection sort. das programm bringt, wenn ichs so starte, immer den folgenden fehler :
Code:
glaube das liegt daran, das man das selectionsort mehrmals hinterinander laufen lässt. aber warum genau ?
---------------------------
Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project2.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 004529AA in Modul 'Project2.exe'. Lesen von Adresse 00D88000'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. --------------------------- OK Hilfe --------------------------- wenn ich was vergesssen hab zu erwähnen dann sagt bitte bescheid, wollte nicht 3 seiten text posten :) danke schonmal ! lg ichtyp
Delphi-Quellcode:
var
Form1: TForm1; schritte, anzahl:integer; // die editfelder variablen c,t1,t2:tLargeInteger; // für die zeitmessung time: extended; x: array of integer; a,b,tmp:integer; // tausch procedur variablen implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin randomize; // "würfeln" queryperformancefrequency(c); // aktuelle zeit holen memo1.Lines.clear; // memofelder leeren memo2.Lines.clear; memo3.Lines.clear; memo4.Lines.clear; memo5.Lines.clear; memo6.lines.Clear; end; // ------ Selection sort ----------------------------// procedure TForm1.Button1Click(Sender: TObject); var h,i,j,k,t :integer; begin memo5.Lines.clear; memo6.lines.Clear; anzahl:=strtoint(edit1.text); // variablen einlesen schritte:=strtoint(edit2.text); setlength (x, anzahl); // array länge zuweisen for i:=1 to anzahl do begin x[i]:=random(anzahl)+1 end;// das array befüllen mit zufallswerten if checkbox1.Checked then // wenn checkbox an , dann zahlen ausgeben begin for i:=1 to anzahl do memo5.lines.add(inttostr(x[i])) end; for h:=1 to schritte do begin anzahl:=anzahl*i; queryperformancecounter(t1); // Zeitmessung start ! for k:=1 to anzahl do begin for j:= k+1 to anzahl do begin if x[j] < x[k] then begin t:=x[j]; x[j]:=x[k]; x[k]:=t; end end end ; if checkbox1.Checked then // wenn checkbox an , dann zahlen ausgeben (sortiert, im feld daneben) begin for i:=1 to anzahl do memo6.lines.add(inttostr(x[i])) end; queryperformancecounter(t2); // Zeitmessung stop ! time:=(t2-t1)/c ; memo1.lines.add(floattostr(time)); end; end; // ===================================================== // |
Re: programmfehler bei selectionsort
Mach doch mal einen Breakpoint auf procedure TForm1.FormCreate.
Wird dieser Breakpoint erreicht oder kommt die Exception schon vorher ? Was wird angezeigt, wenn du Strg+Alt+S drückst ? (=Ansicht -> Debugfenster->Aufrufstack) |
Re: programmfehler bei selectionsort
der fehler tritt erst beim click auf den button auf, falls du das meinst.
|
Re: programmfehler bei selectionsort
Delphi-Quellcode:
x ist eine dynamisches Array und startet bei 0 und endet bei anzahl -1.
if checkbox1.Checked then // wenn checkbox an , dann zahlen ausgeben
begin for i:=1 to anzahl do memo5.lines.add(inttostr(x[i])) end; Grüße Klaus |
Re: programmfehler bei selectionsort
Na dann einen Breakpoint auf die 1. Anweisung in procedure TForm1.Button1Click() setzen, Programm starten und den Button drücken.
Dann mit F8 im Einzelschritt weiter, bis die Exception kommt. Du kannst auch einen 2. Breakpoint in die Mitte der Procedure setzen und das Programm mit F9 weiterrennen lassen. Mit dieser Methode kannst du den Befehl einkreisen, der die Exception auslöst. |
Re: programmfehler bei selectionsort
den breakpoint erstell ich mit f5 , oder ?
oh, ich denke ich habs hinbekommen :) hab die länge des arrays jetzt in der ersten schleife nochmal definiert, sonst kam das nicht hin .. danke für die antworten ! :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz