Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zugriffsverletzung. Doch warum ? (https://www.delphipraxis.net/170582-zugriffsverletzung-doch-warum.html)

Premaider 24. Sep 2012 18:05

Zugriffsverletzung. Doch warum ?
 
Delphi-Quellcode:
procedure TForm1.StartClick(Sender: TObject);
var
i,k: Integer;
begin
k:= SpinEdit1.value;
Setlength(Balken,k);
For i:= low(Balken)+1 to high(balken)+1 do
  begin
    Balken[i]:=TBalken.Create();
    Balken[i].Create;
    Balken[i].Wert:=Random(50)+1;
    Memo1.Lines.Add(IntToStr(i)+'. '+IntToStr(Balken[i].wert));
  end;
Canvas.Create;
Form1.PaintBox1Paint(Start);
SpinEdit1.Enabled:=false;
Start.Enabled:=false;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
i: Integer;
begin
For i:= 1 to high(Balken) do Balken[i].Free;
end;

procedure TForm1.ResetClick(Sender: TObject);
var
i: Integer;
begin
PaintBox1.Invalidate;
Start.Enabled:=True;
SpinEdit1.Enabled:=True;
For i:= 1 to high(balken) do
  begin
    Balken[i].free;
  end;
end;

end.
Ich bekomme bei .ResetClick und bei Form1.OnDestroy.
Beides mal geht es nicht (zugriffsverletzung)
Was mache ich denn falsch?
LG

Bummi 24. Sep 2012 18:06

AW: Zugriffsverletzung. Doch warum ?
 
low(Balken)+1 to high(balken)+1


lass die +1 weg

uppss da sind noch mehr bugs drin

Canvas.Create;

erzeugt bei jedem Click auf Start neue Fonts, Pens und Brushes und macht so sicher nichts sinnvolles

Delphi-Quellcode:
Procedure TForm1.FreeBalken;
var
i: Integer;
begin
// wenn es eine Liste und kein Array ist rückwärts löschen
For i:= high(Balken) downto low(Balken) do Balken[i].Free;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeBalken;
end;


procedure TForm1.ResetClick(Sender: TObject);
var
i: Integer;
begin
PaintBox1.Invalidate;
Start.Enabled:=True;
FreeBalken;
end;

Premaider 24. Sep 2012 18:19

AW: Zugriffsverletzung. Doch warum ?
 
Zitat:

Zitat von Bummi (Beitrag 1184234)
low(Balken)+1 to high(balken)+1


lass die +1 weg

uppss da sind noch mehr bugs drin

Canvas.Create;

erzeugt bei jedem Click auf Start neue Fonts, Pens und Brushes und macht so sicher nichts sinnvolles

Delphi-Quellcode:
Procedure TForm1.FreeBalken;
var
i: Integer;
begin
// wenn es eine Liste und kein Array ist rückwärts löschen
For i:= high(Balken) downto low(Balken) do Balken[i].Free;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeBalken;
end;


procedure TForm1.ResetClick(Sender: TObject);
var
i: Integer;
begin
PaintBox1.Invalidate;
Start.Enabled:=True;
FreeBalken;
end;

Jetzt funktioniert leider mein BubbleSort nicht mehr.
Ich muss mich echt nochmal in die Arrays einlesen. Grundlage >.<
Peinlich :S

Delphi-Quellcode:
procedure TForm1.BubbleSortClick(Sender: TObject);
var
i: Integer;
done: boolean;
temp: integer;
begin
  repeat
    done:= True;
    For i:= 1 to high(Balken) do
      begin
        If Balken[i].Wert > Balken[i+1].Wert then
          begin
            temp := Balken[i].wert;
            Balken[i].Wert := Balken[i+1].Wert;
            Balken[i+1].Wert := temp;
            done := false;
          end;
      end;
  until done;
Memo1.Lines.clear;
For i:= 1 to high(Balken) do Memo1.Lines.add(IntToStr(Balken[i].wert));
Form1.PaintBox1.Invalidate;
Form1.PaintBox1Paint(BubbleSort);
end;

Bummi 24. Sep 2012 18:26

AW: Zugriffsverletzung. Doch warum ?
 
Delphi-Quellcode:
  repeat
    done:= True;
    For i:= 1 to high(Balken) do
      begin
        If Balken[i-1] > Balken[i].Wert then
          begin
            temp := Balken[i-1].Wert;
            Balken[i-1].Wert := Balken[i].Wert;
            Balken[i].Wert := temp;
            done := false;
          end;
      end;
  until done;

Premaider 24. Sep 2012 18:38

AW: Zugriffsverletzung. Doch warum ?
 
Danke jetzt funktioniert alles ! :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 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