Autor Beitrag
elduchte
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 199

Win 2000, Win XP
Delphi 7
BeitragVerfasst: Do 26.06.03 11:12 
Hallo,
ich habe folgendes Programm geschrieben:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
var
   anzahl : integer;
   i      : integer;
   wert   : integer;
   gr_Wert: integer;
   kl_Wert: integer;
   Felder : array of integer;
begin
     anzahl := 0;
     kl_Wert := 0;
     gr_Wert := 0;
     randomize;
     anzahl := StrToInt(Edit1.Text);
     SetLength(Felder, anzahl);
     for i := 1 to Anzahl do
         begin
         wert := random(100);
         Felder[i] := wert;
         end;
     for i := 1 to Anzahl do
         begin
         gr_Wert := MaxIntValue(Felder);
         kl_Wert := MinIntValue(Felder);
         end;
     Edit2.Text := IntToStr(gr_Wert);
     Edit3.Text := IntToStr(kl_Wert);
end;


Nach Start des Programms gebe ich die Anzahl der zu erzeugenden Zufallszahlen ein, die in einem dynamischen Array abgelegt werden sollen. Manchmal habe ich da schon beim Start eine Fehlermeldung der Klasse EAccessViolation: Habe auch schon nachgelesen, was diese Fehlermeldung bedeutet, allerdings kann ich damit immer noch keinen Fehler herausfinden.

Zur nächsten Fehlermeldung:
Gebe ich zB als Anzahl 30 ein, bekomme ich eine Fehlermeldung: Zugriffsverletzung und dann viele Speicheradressen.

Gebe ich als Anzahl 10 ein, berechnet er mir, so wie ich es mir vorstelle, klicke ich dann allerdings auf den Schließen-Button, bekomme ich eine Fehlermeldung, dass ich einen Pointer nicht richtig benutze.

Was mache ich mit meinen dynamischen Arrays falsch ??

ein verzweifelter
Andreas
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Do 26.06.03 11:15 
Hallo

Zitat:

for i := 1 to Anzahl do
begin
wert := random(100);
Felder[i] := wert;
end;

dyn. array beginnen bei 0 und der letzte Index ist dann anzahl-1

probiers mal so
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
     for i := 0 to Anzahl-1 do 
         begin 
         wert := random(100); 
         Felder[i] := wert; 
         end;


warum setzt Du maxintvalue auch noch in eine Schleife?

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
elduchte Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 199

Win 2000, Win XP
Delphi 7
BeitragVerfasst: Do 26.06.03 11:43 
AHHHH, stimmt ja, jetzt habe ich zumindestens keine Fehlermeldung mehr...

Die zweite Schleife war nur ein Versuch, habe gedacht, so finde ich den Fehler besser (einfacher). Habe die beiden Funktionen schon wieder umkopiert.

Wie kann ich alle Array-Felder löschen, wenn ich z.B. das Programm ein zweites Mal furchlaufen möchte ? Er behält nämlich die Werte solange gespeichert, bis ich das Programm beende.... Gibt es da sowas wie eine Initialisierung?

Gruß
Andreas
BeniSchindler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 82

Win 2k / suse9.1
D7 Prof / Kylix 3
BeitragVerfasst: Do 26.06.03 12:41 
Wenn du die selbe Procedur einfach nochmal aufrufst, dann müsste er eigentlich deine alten Werte überschreiben. Du kannst jedoch am anfang der Prozedure die Zeile schreiben:

ausblenden Delphi-Quelltext
1:
SetLength(Felder, 0);					


Nach dem der Integer kein Objekt ist, kannst du ihn leider auch nicht Freigeben. Bei einem Array of TObject würde man das ganze so lösen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Procedure ClearArray(var  TheArray : array of TObject );
var index :integer;
begin
  for index := 0 to high(TheArray) do TheArray[Index].Free;
  SetLength(TheArray,0
end;

_________________
Result := 42; Application.ProcessMessages;