AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Sortieralgorithmus verursacht Zugriffsverletzung
Thema durchsuchen
Ansicht
Themen-Optionen

Sortieralgorithmus verursacht Zugriffsverletzung

Ein Thema von Vasco da Gama · begonnen am 3. Feb 2010 · letzter Beitrag vom 4. Feb 2010
Antwort Antwort
Vasco da Gama

Registriert seit: 2. Aug 2009
131 Beiträge
 
Delphi 2009 Professional
 
#1

Sortieralgorithmus verursacht Zugriffsverletzung

  Alt 3. Feb 2010, 16:30
Hallo, ich hoffe ich störe nicht mit meiner (möglicherweise) dummen Frage:

Ich habe folgenden Code zum Sortieren:
Delphi-Quellcode:
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;
SwapThings ist eine überladene Funktion, nämlich:
Delphi-Quellcode:
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;
SortArray soll also 2 Arrays nach einem davon (dem Integer Array) sortieren.
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
Flo
Programmiere inzwischen hauptsächlich mit C++. Nicht böse werden
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Sortieralgorithmus verursacht Zugriffsverletzung

  Alt 3. Feb 2010, 16:40
Hallo,

sollte die erste for-Schleife nicht besser so sein:

Delphi-Quellcode:
for j := high(AArray) downto low(AArray) do
//...
Dynamische Arrays fangen eigentlich immer bei 0 an.
(Low(AArray) liefert den kleinsten Index, könnte also eigentlich auch gleich direkt 0 sein)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Sortieralgorithmus verursacht Zugriffsverletzung

  Alt 3. Feb 2010, 16:47
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.995 Beiträge
 
Delphi 12 Athens
 
#4

Re: Sortieralgorithmus verursacht Zugriffsverletzung

  Alt 3. Feb 2010, 16:58
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.
Uwe Raabe
  Mit Zitat antworten Zitat
Vasco da Gama

Registriert seit: 2. Aug 2009
131 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Sortieralgorithmus verursacht Zugriffsverletzung

  Alt 3. Feb 2010, 17:05
Danke an euch alle

Der Tipp von Helmi war richtig, damit klappts wunderbar.

mfG
Flo
Programmiere inzwischen hauptsächlich mit C++. Nicht böse werden
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Sortieralgorithmus verursacht Zugriffsverletzung

  Alt 4. Feb 2010, 10:13
Zitat von Helmi:
Delphi-Quellcode:
for j := high(AArray) downto low(AArray) do
//...
Mit j = 0 wird die innere Schleife nicht ausgeführt, also besser:
Delphi-Quellcode:
for j := high(AArray) downto 1 do
//...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz