![]() |
Re: EAccessViolation bei Bubblesort
nee das funktioniert auch nicht, immernoch der gleiche fehler...
|
Re: EAccessViolation bei Bubblesort
Hilft eventuell
![]() EDIT: Da ich oben sehe, das ein Speicherfehler vorliegt, du benutzt doch eine Liste, wurde diese auch richtig instanziert? Eventuell hilft es dir, wenn du mal unter Optionen -> Compiler -> Optimierung uncheckst und dann mit F4 und F7 deinen Code einzeln durchguckst. Wenn du dann mit der Maus drüber gehst, kannst du dir die Werte der Variablen zur Laufzeit anzeigen lassen :o) EDIT2: Gerade mal deinen Quelltext angeschaut. Also du hast ja ein
Delphi-Quellcode:
Du solltest hier, bevor du auf diese Liste irgendwie verweist und Werte schreiben willst, diese auch mal instanzieren. BVis jetzt weiß Delphi nämlich noch nicht, wo diese im Speicher sich befindet.
var List: TStringList;
Füge mal ein
Delphi-Quellcode:
hinzu
List:= TStringList.Create;
|
Re: EAccessViolation bei Bubblesort
Delphi-Quellcode:
dann kommt ein fehler, dass "blg" und "TStringlist" inkompatible Typen sind
procedure BubbleSort(var List: Blg);
var done: boolean; i, n: integer; Dummy: string; begin List:= TStringList.Create; Edit: ich habe das "list:= TStringList.Create" mal als formcreate prozedur geschrieben, aber dann kommt der ursprüngliche Fehler immernoch! |
Re: EAccessViolation bei Bubblesort
Tut mir leid, war mein Fehler. Das kannst du wieder wegmachen ;o)
Ich schätze mal deine Bereichsverletzung kommt aus der Zeile.
Delphi-Quellcode:
Mache hier draus mal
for i := Low(List) to High(List) - 1 do
Delphi-Quellcode:
Wenn du dir das hier mal anschaust
for i := Low(List) to High(List) - 2 do
Delphi-Quellcode:
procedure BubbleSort(Items: TStrings);
var done: boolean; i, n: integer; Dummy: string; begin n := Items.Count; repeat done := true; for i := 0 to n - 2 do if Items[i] > Items[i + 1] then begin Dummy := Items[i]; Items[i] := Items[i + 1]; Items[i + 1] := Dummy; done := false; end; until done; end; procedure TForm1.Button1Click(Sender: TObject); begin BubbleSort(Listbox1.Items); end; ![]() Hab ich in #12 schon gepostet ;) |
Re: EAccessViolation bei Bubblesort
das hier funktioniert so nicht, weil er dann nur 4 statt 5 Werte sortiert und den 5. Wert einfach an den Schluss hängt. Die Sortierung wird dann also falsch:
Delphi-Quellcode:
Den Link zum Bubblesort habe ich mir schon angeguckt, jedoch habe ich ein record und kein einfaches array....
for i := Low(List) to High(List) - 2 do
|
Re: EAccessViolation bei Bubblesort
Hast du mal geschaut, an welcher Stelle er den Fehler bringt?
|
Re: EAccessViolation bei Bubblesort
der Fehler müsste schon relativ früh auftauchen glaube ich. Wenn ich Bubblesort einfach rauskommentiere, steht im string nicht das, was da stehen soll (also das Editfeld). Also müsste theoretisch beim Einlesen des stringwertes ein Fehler sein, aber andererseits klappt das "StrToInt" bei den Noten wunderbar, somit weiß der Rechner ja eigentlich, welches Editfeld gemeint ist... Eigentlich...
|
Re: EAccessViolation bei Bubblesort
Delphi-Quellcode:
Das ist ja eigentlich keine wirkliche Änderung :\
procedure TAbiturrechner.Button1Click(Sender: TObject);
var noten : Blg; i : integer; begin for i := 1 to 5 do begin noten[i].Notenpunkte := strtoint(Edit1.Text); noten[i].Editfeld := Edit1.Text; end; Bubblesort(noten); end EDIT: Wieso eigentlich 5 mal das gleiche aus Edit1.Text auslesen? Und warum genau 5 mal, wenn doch Blg ein Array[1..10] ist ? |
Re: EAccessViolation bei Bubblesort
da wird nichts 5 mal aus Edit1.Text ausgelesen, das musst du falsch verstanden haben. Schaue dir doch nochmal meinem Post #9 an, da steht:
Delphi-Quellcode:
s := TEdit(FindComponent('Edit' + inttostr(i))).Text;
|
Re: EAccessViolation bei Bubblesort
Da steht dann aber nicht "Edit1.Text" drin, sondern der Inhalt von Edit1 ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 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 by Thomas Breitkreuz