Thema: Delphi Zugriffsverletzung?

Einzelnen Beitrag anzeigen

Wulli12

Registriert seit: 25. Dez 2013
4 Beiträge
 
#1

Zugriffsverletzung?

  Alt 26. Dez 2013, 01:11
Ich habe in meinem Programm eine function, welche mir einen gegebenen string sortieren soll.

z.B. : '7,3,11,5,1' --> '1,3,5,7,11'

Dazu gebe ich meiner function einen string in solch einer Form, also durch Kommas abgetrennte Zahlen. Daraufhin soll es die einzelnen Zahlen separieren und in einem Array aufteilen. Daraufhin durch meinen Such-Algorithmus die einzelnen Glieder jeweils vergleichen und in ein anderes Array in geordneter Reihenfolge kopieren. Und als Ausgabe diese einfach wieder durch Kommas getrennt als einzelnen string ausgeben.

Ich denke vom Verfahren her ist mein Code in Ordnung, jedoch bekomme ich immer den folgenden Error:

Zugriffsverletzung bei Adresse 00403EBC in Modul 'psort.exe'. Lesen von Adresse 00000004.

Hier noch einmal mein Delphi-Code:

Delphi-Quellcode:
unit msort;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Edit1Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

function sortString(input: string): string;
  var i, j, x: integer;
      output, rest: string;
      unsorted, sorted: array of string;
begin

  rest:= input;
  i:= 1;

  repeat

  if pos(',', rest) <> 0 then
  begin

    unsorted[i]:= copy(rest, i, pos(',', rest) - 1);
    rest:= copy(rest, pos(',', rest) + 1, length(rest));
    i:= i + 1;

  end;

  if pos(',', rest) = 0 then
  begin

    unsorted[i]:= copy(rest, 1, length(rest));
    rest:= '';

  end;

  until rest = '';

  for i:= 1 to length(unsorted) do
  begin

  x:= i;

  for j:= 1 to length(unsorted) do
  begin

      if (j <> i) and (unsorted[j] <> '') then
      begin

        if strtofloat(unsorted[x]) < strtofloat(unsorted[j]) then
        begin

          x:= j;

        end;

      end;

    end;

    sorted[i]:= unsorted[x];

  end;

  output:= sorted[1];

  for i:= 2 to length(sorted) do
  begin

  output:= output + ',' + sorted[i];

  end;

  result:= output;

end;

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
begin

  Edit2.Text:= sortString(Edit1.Text);

end;

end.
Ich hoffe mir kann jemand sagen, worin genau mein Fehler liegt, denn ich habe keine Ahnung was ich falsch gemacht haben könnte. Und schon einmal Danke im vorraus.
  Mit Zitat antworten Zitat