Entwickler-Ecke
Sonstiges (Delphi) - Stack-Overflow beim Erzeugen einer CheckBox
UGrohne - Mi 18.12.02 14:19
Titel: Stack-Overflow beim Erzeugen einer CheckBox
Was ist in diesem Code der grundlegende Fehler? Ich seh ihn nicht, steh wohl aufm Schlauch
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:
| type TProgramm = record name:String; CheckBox:TCheckBox; Text:TLabel; XMLFile:TXMLDocument; XMLInternet:TXMLDocument; end;
var programs:array of TProgramm begin for i:=0 to Length(programs)-1 do with programs[i] do begin xmlinetstream:=TMemoryStream.Create; XMLInternet:=TXMLDocument.Create(Self); IdHTTP.Get(serverform.LabeledEdit1.Text+programs[i].name+'.xml',xmlinetstream); xmlinetstream.LoadFromStream(xmlinetstream); if update(i) then begin CheckBox:=TCheckBox.Create(Self); Parent:=Panel3; Left:=136;Top:=70+i*25; Caption:=programs[i].name; end; xmlinetstream.Free; end; |
Die anderen unwichtigen Sachen hab ich weggelassen
Beim Erzeugen der CheckBox bekomm ich immer einen Stack OVerflow, sobald die Prozedur beendet ist, aber warum?
Gruß
smiegel - Mi 18.12.02 14:46
Hallo,
wann und wo wird Dein
array of TProgramm initializiert?
Falsch:
Quelltext
1:
| for i:=0 to Length(programs)-1 do |
besser so:
Quelltext
1:
| for i:=0 to High(programs) do |
Tino - Mi 18.12.02 15:10
dann am besten sofort:
Quelltext
1:
| for i:= Low (programs) to High (programs) do |
Gruß
TINO
UGrohne - Mi 18.12.02 16:36
Das Array wird eigentlich nirgends initialisiert, brauch ich ja doch auch net, oder ?
Das mit dem High isn netter Tipp, aber es hilft ja generell net weiter. Sobald ich die CheckBox erzeuge bringt er den Stapelüberlauf.
Davor wird das Label erzeugt und angezeigt, das funktioniert auch sehr gut. Ich weiß net, worans liegt. :-(
Tino - Mi 18.12.02 16:45
| UGrohne hat folgendes geschrieben: |
| Das Array wird eigentlich nirgends initialisiert, brauch ich ja doch auch net, oder ? |
Dann wird der Code in der FOR-NEXT-Schleife doch garnicht bearbeitet!
Gruß
TINO
UGrohne - Mi 18.12.02 17:17
Ach das meinst Du, ok.
Ne, das Array stellt eine Liste von Programmen dar, die vorher aus der Registry gelesen werden. Danach wird das array gefüllt mit den Programmnamen und XML-Dokumenten mit Versionsinformationen aus dem Verzeichnis des Programms.
Mit diesem Code sollen jetzt die Infos ausm Internet geholt werden und die XML-Daten auch in das array reinkommen. Dann soll mit der Funktion update überprüft werden, ob das Programm upgedatet werden soll oder nicht und wenn ja, soll eine CheckBox erzeugt werden, die dem Anwender diese Möglichkeit eröffnet.
So, und jetzt wisst ihr auch, dass es um ein Update-Programm geht *g*
smiegel - Mi 18.12.02 18:35
Hallo,
warum muss ein dynamisches Array nicht initialisieren werden und warum soll dann die For-Next-Schleife nicht gehen?
UGrohne - Mi 18.12.02 19:04
Ich habs auch erst beim 2. Lesen verstanden: Es ging darum, dass das dynamische Array ja eine Größe haben muss, und das meintest Du mit Initialisieren. Denn sonst wären ja keine Elemente drin und dann würde die For-Next-Schleife nicht funktionieren, da die Länge des Arrays ja 0 wäre. So hab ichs jetzt verstanden
UGrohne - Mi 18.12.02 19:24
Keiner hats gesehn, ich habs endlich entdeckt: Dieses with ... hat mich total durcheinander gebracht. Hab ja bei Parent, left, top usw nicht die Eigenschaft von der CheckBox verändert sondern vom formular selbst. Habs bemerkt, als ich Parent auskommentiert hab, da hats getan, nur hats dann das fenster verschoben.
Also jetzt funktionierts, trotzdem vielen Dank an alle. *g*
Dumm darf man sein, man sollte sich nur nicht erwischen lassen
Gruß
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!