AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Schleife

Ein Thema von Fridolin · begonnen am 29. Mai 2007 · letzter Beitrag vom 29. Mai 2007
Antwort Antwort
Fridolin

Registriert seit: 8. Jan 2007
71 Beiträge
 
Delphi 2006 Architect
 
#1

Problem mit Schleife

  Alt 29. Mai 2007, 08:45
Guten Morgen,

ich habe ein Problem mit folgender Schleife. Also, zuerst prüfe ich wieviele Einträge in meiner listbox stehen.
Danach setze ich die länge für mein Array fest und zuletzt möchte ich das dem Array in der Schleife die Namen der Einträge aus der Listbox zugewiesen werden. Aus irgendeinem Grund, kommt eine Exception mit der Meldung Zugriffsverletzung...
Was ich besonders seltsam finde ist, dass es manchmal (in 5% der Fälle) funktioniert. Das weiß ich weil ich es schon ein paar mal getestet hab weil ich der Meinung war das der Code so funktionieren müsste...

Delphi-Quellcode:
procedure TTA_Daten_HinzuDLG.Button3Click(Sender: TObject);
var dstnum,y,i,sch:integer;
dstlistar:array of string;
begin
 dstnum:=dstlist.Items.Count;
 setlength(dstlistar,dstnum);
 y:=1;

 sch:=0;
 for i:=1 to dstnum do begin

   dstlistar[y]:=dstlist.Items.Strings[sch];
   y:=y + 1;
   sch:=sch + 1;

 end;

label3.Caption:=dstlistar[1];

end;
MfG
Fridolin
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Problem mit Schleife

  Alt 29. Mai 2007, 08:51
Delphi-Quellcode:
procedure TTA_Daten_HinzuDLG.Button3Click(Sender: TObject);
var
  dstnum,i:integer;
  dstlistar:array of string;
begin
  dstnum:=dstlist.Items.Count;
  setlength(dstlistar,dstnum);

  for i:=0 to dstnum -1 do
    dstlistar[i]:=dstlist.Items.Strings[i];

  label3.Caption:=dstlistar[1];

end;
Auch dynamische Array fangen mit dem Index 0 an, genau wie die Items Deiner Listbox.
Der Endwert der Items der Listbox ist items.count -1.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Problem mit Schleife

  Alt 29. Mai 2007, 08:53
Hallo Fridolin,

ein dynamisches Array beginnt mit Index 0 genau wie die Items einer Listbox. Das hier:

Delphi-Quellcode:
y:=1;
sch:=0;

for i:=1 to dstnum do begin

   dstlistar[y]:=dstlist.Items.Strings[sch];
   y:=y + 1;
   sch:=sch + 1;

end;
würde ich so schreiben:

Delphi-Quellcode:
for i := 0 to dstnum - 1 do
begin
  dstlistar[i] := dstlist.Items.Strings[i];
end;
Edit: Da es afaik i-1 heißen muss (weil sch um 1 niedriger ist) und ich bei 1 anfange, da er auf den vorigen Index zugreifen möchte, sende ich meinen Beitrag auch ab. ABer ich muss zugeben, verstanden habe ich noch nicht, was der Code soll.

Edit 2: Achso 1:1 übertragen, dann hat Klaus recht, hab's angepasst.
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Problem mit Schleife

  Alt 29. Mai 2007, 08:56
Zitat von Matze:
Delphi-Quellcode:
for i := 1 to dstnum - 1 do
begin
  dstlistar[i] := dstlist.Items.Strings[i - 1];
end;
aber doch bei 0 startend oder!? (immer diese Flüchtigkeitsfehler ^^)
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Problem mit Schleife

  Alt 29. Mai 2007, 08:57
@Matze: Du greifst trotzdem bei deinem beiden Codestücken auf das dynamische Array von 1..Count zu - entgegen deinen Aussagen.

/EDIT: Ok, nun nur noch bei deinem ersten Beispiel...
/EDIT2: Achso, erstes ist ein Zitat, nun, dann ist das richtig falsch - wobei richtig sich hier auf die Wiedergabe von Matze bezieht.

@Fridolin: Schalte mal bitte unter Projekt->Optionen->Compiler die Bereichsprüfung ein und erstelle dein Projekt komplett neu. Dann würdest du bei Zugriffe auf falsche Elemente benachrichtigt werden und kannst sowas leichter finden.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Problem mit Schleife

  Alt 29. Mai 2007, 08:58
Ja, ich weiß. Es hat einmal bei Index 1 angefangen, das andere mal bei 0, daher dachte ich zuerst, er möchte etwas verschieben. Wenn er nämlich in der Schleife auf den vorigen Index zugegriffen hätte (so habe ich seinen Code zuerst interpretiert), dann wäre die 1 schon richtig. Mir kam aber dann, was er eigentlich möchte. *g*

Edit: Was verursache ich wieder für Dikusionen am frühen morgen. Es ist alles in Ordnung, Klaus hat's von Anfang an korrekt gemacht und ich habe mich zuerst geirrt. Ruhe jetzt.
Edit 2: Der obere Code-Snippet ist doch 1:1 zitiert und stammt nicht von mir.
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#7

Re: Problem mit Schleife

  Alt 29. Mai 2007, 08:59
Wenn Du das ganze in der IDE laufen lässt, dann bekommst Du die Stelle angezeigt, an der es knallt.

Davon mal abgesehen, ist mir nicht ganz klar, was du mit den lokalen Variablen y und sch bezwecken willst, wenn Du das Ganze auch mit i bzw. i-1 machen kannst.

Und ein Array fängt bei 0 an; nicht bei 1.
  Mit Zitat antworten Zitat
Fridolin

Registriert seit: 8. Jan 2007
71 Beiträge
 
Delphi 2006 Architect
 
#8

Re: Problem mit Schleife

  Alt 29. Mai 2007, 09:23
Super, danke....

Hab ich garnich dran gedacht


Zitat von s-off:
Wenn Du das ganze in der IDE laufen lässt, dann bekommst Du die Stelle angezeigt, an der es knallt.

Davon mal abgesehen, ist mir nicht ganz klar, was du mit den lokalen Variablen y und sch bezwecken willst, wenn Du das Ganze auch mit i bzw. i-1 machen kannst.

Und ein Array fängt bei 0 an; nicht bei 1.
Haben Klaus und Muetze1 ja schon erklärt...
  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 19:24 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