![]() |
Delphi-Version: 5
array-variablen können nicht gesetzt werden
Moin community,
ich habe folgendes Problem, dass mich schon seit Tagen verzweifeln lässt: ich habe ein Array [1..34] vom typ integer als Variable einer Klasse (TBaum), dass ich nun mit Daten (Integer-Zahlen natürlich) füttern möchte!
Delphi-Quellcode:
Jetzt mein Problem:
type TBaum = class
private FBlatt array [1..34] of integer; public constructor create; end; implementation constructor TBaum.create; var I: integer; begin inherited create; for I:=1 to 34 do FBlatt[I] := I; //Hier tritt die exception nur an Position 12 und 13 auf... end; wenn ich nun über eine for-schleife (von 1 bis 34) das array immer mit dem aktuellen wert des zählers in der for-schleife fülle, bekomme ich eine exception! Einiges herumexperimentieren mit showmessages hat mich herausgefinden lassen, dass diese exception nur bei dem schreiben in dem 12. und 13. feld des arrays auftritt! Auslesen dagegen kann ich das array ohne probleme! woran liegts? gibts da iwie einen Lösungsansatz? Ich habe das Programm auf mehreren Rechnern getestet, überall das gleiche! hats was mit dem Betriebsystem zu tun (Delphi 7 unter Vista 64/ Win 7 32)? Apropos: diese exception tritt nicht auf, wenn ich unter Button1.click ein array beschreiben lasse! Also muss es iwie in der Verbindung mit der Klasse liegen... oder? Danke schonmal für eure Antworten ;) |
AW: array-variablen können nicht gesetzt werden
Wie erzeugst du dein TBaum-Objekt?
|
AW: array-variablen können nicht gesetzt werden
Da dein Code (wegen fehlenden Doppelpunkt) nicht kopiert sein kann auch folgende Frage:
Kann Dein Member FBlatt im orginalen Code auch so definiert sein?
Delphi-Quellcode:
Also ohne Range-Angabe [1..34]private FBlatt : array of integer; Bei einem nicht initialisierten dynamischen Array wäre das ein typisches Verhalten. |
AW: array-variablen können nicht gesetzt werden
BTW:
Fixe Bereichsangaben der Art
Delphi-Quellcode:
sind i.d.R. gefährlich.
for I:=1 to 34 do
Besser so:
Delphi-Quellcode:
:-D
for I:= Low(FBlatt) to High(FBlatt) do
|
AW: array-variablen können nicht gesetzt werden
@ himitsu:
Delphi-Quellcode:
ich glaube auch das hier irgendwo das Problem liegt, da mein array-beschreiben ja in einer Button.click funktioniert.... aber was scheint falsch an dem create?
procedure TForm1.Button1Click(Sender: TObject);
var Eiche: TBaum; begin Eiche.create; end; @ Satty67: Tatsächlich habe ich den Code nur teilweise kopiert, sehr spitzfindig ;) ändert aber nichts am Problem xD nein das array ist definitiv als statisch gesetzt (also von 1 bis 34), ich brauche in diesem Fall keine dynamischen arrays! @Deep-Sea: Ja du hast recht, ist besser ;) aber eigentlich bei (meinem) statischen array sollte doch beides einwandfrei gehen, oder? apropos, wenn ich wahlweise den bereich des arrays veränder (also von 1 bis 100) tritt die exception an einer anderen Stelle auf, immer nur für 1-2 felder... selten dämlich! sollte ich versuchen komplett mit einem dynamischen array zu arbeiten? EDITH sagt: So ein blöder Mist, ich initialisiere die Instanz der Klasse natürlich falsch! Müsste heißen:
Delphi-Quellcode:
und es funktioniert einwandfrei!
Eiche := TBaum.create
Ich danke euch trotzdem allen für eure Mühe :) (BTW: warum gibt mir der Compiler nicht sopfort ne fehlermeldung oder so?) Gruß |
AW: array-variablen können nicht gesetzt werden
Zitat:
Delphi-Quellcode:
heißen :wink:
Eiche := TBaum.create;
Zitat:
Erst recht nervig wird es, wenn du so eine Schleife häufiger nutzt, dann muss du die Werte an dutzenden Stellen anpassen. Nervige Arbeit. |
AW: array-variablen können nicht gesetzt werden
wow, du bist aber fix, habs auch gerade gemerkt^^
werd das mit der for-schleife so machen, die vorteile liegen auf der Hand ;) Danke & Gruß |
AW: array-variablen können nicht gesetzt werden
Zitat:
Man muß rückgabewerte nicht speichern (
Delphi-Quellcode:
)
x := ...
und man kann über
Delphi-Quellcode:
ein neues Objekt vom internen Typ des Objektes in der Variable erstellen.
x := variable.Create;
Nur wenn da kein kein Objekt in der Variable drin ist, dann knallt es natürlich.
Delphi-Quellcode:
In deinem Fall war wohl irgendein zufälliger Wert/Zeiger/Pointer in der Objektvariable drin, welcher so zeigte, daß anfangs noch "irgendwlecher" beschreibbarer Speicher vorlag und ab einer gewissen Stelle war dieser Speicher nicht mehr beschreibbar und es knallte.
var
obj, obj2: TControl; begin obj := TEdit.Create(Self); obj2 := obj.Create(Self); ShowMessage(obj2.ClassName); Womöglich hätte es auch gut gehen können, z.B. wenn der Zeiger woandershin zeigte oder wenn dein Array kleiner wäre, aber dann hätte es woanders knallen können, weil du ja auch einen wichtigen Speicherbereich hättest überschreiben können (eine Art von Buffer Overrun). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz