Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Ungültige Zeigeroperation beim randomizen von Zahlen. (https://www.delphipraxis.net/193843-ungueltige-zeigeroperation-beim-randomizen-von-zahlen.html)

Gurkenmann 14. Sep 2017 13:35

Ungültige Zeigeroperation beim randomizen von Zahlen.
 
Hey, ich bin hier relativ neu, also ich hab noch nicht so viel Erfahrung ^^
Ich hab für die Schule mit einem Kumpel ein Programm erstellt, welches Zahlen mit verschiedenen Algorithmen sortiert.+

Nun habe ich es so gemacht, dass ich ein Edit Feld habe, wo ich die Anzahl an Zahlen eintragen kann, die sortiert werden sollen.
Diese Zahl bestimmt dann die Länge meines Arrays.
Zudem bestimmt die Zahl auch die Länge meines Stringgrids, wo ich die Zahlen reinmachen will.
Da ich aber für jeden Algorithmus mein eigenes Array haben wollte, habe ich dementsprechend viele Arrays.
Ich hoffe man konnte es einiger massen gut nachvollziehen :o

Hier also mein Code:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
Var
 t,n,j: Integer;
begin
  t:= strtoint(Edit1.Text);
  t:=t-1;

  setlength(ZahlSort, t);

  StringGrid1.RowCount:= strtoInt(Edit1.Text);
  StringGrid2.RowCount:= strtoInt(Edit1.Text);
  StringGrid3.RowCount:= strtoInt(Edit1.Text);
  StringGrid4.RowCount:= strtoInt(Edit1.Text);
  StringGrid5.RowCount:= strtoInt(Edit1.Text);

  SetLength(Zahl1, Length(ZahlSort));
  SetLength(Zahl2, Length(ZahlSort));
  SetLength(Zahl3, Length(ZahlSort));
  SetLength(Zahl4, Length(ZahlSort));
  SetLength(Zahl5, Length(ZahlSort));

   StringGrid6.Cells[0,0] := 'Bubblesort';
   StringGrid6.Cells[0,1] := 'Insetionsort';
   StringGrid6.Cells[0,2] := 'Shellsort';
   StringGrid6.Cells[0,3] := 'Quicksort';
   StringGrid6.Cells[0,4] := 'Selectionsort';


  randomize;
  For n:=0 to strtoint(Edit1.Text) do

  begin
    ZahlSort[n] := random(strtoint(Edit1.Text));
  end;
  Zahl1:=ZahlSort;
  Zahl2:=ZahlSort;
  Zahl3:=ZahlSort;
  Zahl4:=ZahlSort;
  Zahl5:=ZahlSort;

  For j:=0 to strtoint(Edit1.Text) do
    begin
      StringGrid1.Cells[0,j] := inttostr(Zahl1[j]);
      StringGrid2.Cells[0,j] := inttostr(Zahl2[j]);
      StringGrid3.Cells[0,j] := inttostr(Zahl3[j]);
      StringGrid4.Cells[0,j] := inttostr(Zahl4[j]);
      StringGrid5.Cells[0,j] := inttostr(Zahl5[j]);



    end;

end;
Und nun bekomme ich manchmal die Fehlermeldung "ungültige Zeigeroperation".
Waran liegt das?

Ich hoffe ihr könnt mir helfen :)

DeddyH 14. Sep 2017 13:54

AW: Ungültige Zeigeroperation beim randomizen von Zahlen.
 
Du nimmst t aus dem Edit entgegen, ziehst 1 ab und hast damit die Länge Deiner Arrays. Dann darfst Du sie aber nicht von 0 bis <Zahl im Edit> durchlaufen, da sie von 0 bis <Zahl im Edit> - 2 gehen. Schalt doch mal die Bereichsprüfung ein. Und noch ein Tipp: wenn man Arrays von Low() bis High() durchläuft, muss man sich um den Index des ersten Elements und solche Dinge keine Gedanken machen.

Gurkenmann 14. Sep 2017 14:07

AW: Ungültige Zeigeroperation beim randomizen von Zahlen.
 
Wo finde ich diese Bereichsprüfung?

Aviator 14. Sep 2017 14:11

AW: Ungültige Zeigeroperation beim randomizen von Zahlen.
 
Zitat:

Zitat von Gurkenmann (Beitrag 1381175)
Wo finde ich diese Bereichsprüfung?

Projektoptionen --> Delphi-Compiler --> Compilieren --> Kategorie Laufzeitfehler --> Bereichsüberprüfung --> auf "True" stellen.

DeddyH 14. Sep 2017 14:15

AW: Ungültige Zeigeroperation beim randomizen von Zahlen.
 
In aktuellen Delphi-Versionen unter Projekt - Optionen - Delphi-Compiler - Compilieren, dann auf der rechten Seite unter Laufzeitfehler.

Gurkenmann 14. Sep 2017 14:29

AW: Ungültige Zeigeroperation beim randomizen von Zahlen.
 
Oh, ok! danke :)
Jo... ich glaube es hat geklappt ^^ also es kommt keine Fehler Meldung mehr ^^
thx


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