![]() |
Sortieralgorithmus verursacht Zugriffsverletzung
Hallo, ich hoffe ich störe nicht mit meiner (möglicherweise) dummen Frage:
Ich habe folgenden Code zum Sortieren:
Delphi-Quellcode:
SwapThings ist eine überladene Funktion, nämlich:
procedure SortArray(var AArray: Array of Integer; var BArray: Array of String); overload;
var i, j: Integer; begin for j := Length(AArray) downto 1 do begin for i := 1 to j do begin if (AArray[i - 1]>AArray[i]) then begin SwapThings(AArray[i - 1], AArray[i]); SwapThings(BArray[i - 1], BArray[i]); end; end; end; end;
Delphi-Quellcode:
SortArray soll also 2 Arrays nach einem davon (dem Integer Array) sortieren.
procedure SwapThings(var A, B: Integer); overload;
var temp: Integer; begin temp := A; A := B; B := temp; end; procedure SwapThings(var A, B: String); overload; var temp: String; begin temp := A; A := B; B := temp; end; Also übergebe ich SortArray ein Integer und ein StringArray, die dieselbe Größe haben(ich lasse es mir unmittelbar davor mit showmessage anzeigen) Beim SortArray erhalte ich aber eine Zugriffsverletzung. Durch gezieltes Auskommentieren konnte ich herausfinden, dass der Fehler irgendwo in der SwapThings procedure liegt (in der mit den Strings) Aber wo genau liegt denn mein Fehler? Ich danke allen im Voraus, die sich meines Problems annehmen und entschuldige mich falls mein Fehler trivial ist. mfG |
Re: Sortieralgorithmus verursacht Zugriffsverletzung
Hallo,
sollte die erste for-Schleife nicht besser so sein:
Delphi-Quellcode:
Dynamische Arrays fangen eigentlich immer bei 0 an.
for j := high(AArray) downto low(AArray) do
//... (Low(AArray) liefert den kleinsten Index, könnte also eigentlich auch gleich direkt 0 sein) |
Re: Sortieralgorithmus verursacht Zugriffsverletzung
ich rate mal so ins Blaue hinein, das es gut wäre die Größe des Arrays mit zu übergeben.
(kann mich aber auch irren!) Gruß K-H |
Re: Sortieralgorithmus verursacht Zugriffsverletzung
In der äußeren Schleife hat j als erstes den Wert Length(AArray) und diesen Wert erreicht I am Ende der inneren Schleife. Length(AArray) ist aber kein gültiger Index mehr.
Schalte mal das RangeCheck ein, dann kommt der Fehler sicher schon früher. |
Re: Sortieralgorithmus verursacht Zugriffsverletzung
Danke an euch alle :dp:
Der Tipp von Helmi war richtig, damit klappts wunderbar. mfG :cheers: |
Re: Sortieralgorithmus verursacht Zugriffsverletzung
Zitat:
Delphi-Quellcode:
for j := high(AArray) downto 1 do
//... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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