![]() |
Delphi-Version: XE2
Problem mit msvcrt.dll
Liste der Anhänge anzeigen (Anzahl: 3)
Tach zusammen,
habe ein recht komisches Problem mit meinen Delphi, es tretten Sachen auf, die ich mir nicht erklären kann. Bild 001 ist eine Ausgabe, wie angeblich ein String aussehen soll, den ich von hand eingegeben habe. Im bild 001_debug kann aber man gut sehen, dass der Parameter eigentlich auf "test" steht ...
Delphi-Quellcode:
hier ist die Methode wo der Fehler auftritt.
procedure TErrechne.AddStadt(AlleNachbarn: allNachbarn; Name: string);
var temp: TStadt; begin temp := TStadt.create(Name, AlleNachbarn); self.AllStadte.Add(temp); showmessage(self.AllStadte[AllStadte.Count - 1].getName); end; Möchte ich nun in verschiedenen Teilen des Programmes getname aufrufen, kommt ein komischer Fehler. Daraufhin habe ich das showmessage und auch hier kommt der Fehler, Das hindert ein nun am programmieren, da einfach sachen wie ein .add oder ein Object.getname zu komischen fehler führt, hat wer irgendwie eine Idee...? |
AW: Problem mit msvcrt.dll
Sicherlich magst du uns noch paar Inputs geben, wie z.B.:
1. Wird ein Create von AllStadte aufgerufen, wenn ja wo und was passiert da 2. Ist AllStadte zu diesem Zeitpunt assigned 3. was macht das Add von AllStadte 4. was macht das GetName von AllStadte 5. was zeigt AllStadte.Count an |
AW: Problem mit msvcrt.dll
Gerne gib ich weiter Informationen raus,
wusste nur nicht was ihr genau wissen müsst: 1. Wird ein Create von AllStadte aufgerufen, wenn ja wo und was passiert da Ja wird es, im Form create wird die klasse TErrechne erstellt. ,
Delphi-Quellcode:
und im Constructor von TErrechne wird AllStadte erstellt.
procedure TForm6.FormCreate(Sender: TObject);
begin if not Assigned(self.Berechnung) then begin self.Berechnung := TErrechne.create; end; end; constructor TErrechne.create; begin self.AllStadte := TObjectList<TStadt>.create; end; 2. Ist AllStadte zu diesem Zeitpunt assigned ja, da es ganz zum anfang erstellt wird. 3. was macht das Add von AllStadte AllStadte ist eine normale GenericsObjectlist von typ TStadt, am add selbst habe ich nichts geändert. 4. was macht das GetName von AllStadte Da allStadte eine Objectliste ist, greif ich auf das Object zu. Das ist eine Instance von TStadt. das getname von TStadt gibt nur eine private Variable zurück.
Delphi-Quellcode:
5. was zeigt AllStadte.Count an
function TStadt.getName: string;
begin result := name; end; Zeig nach dem add´n 1 an. Wer noch mehr infos braucht, einfach fragen. Ich versuch alle nötigen Informationen zu liefern. |
AW: Problem mit msvcrt.dll
OK, fehlt noch :
6. Ist AllStadte[0] zu diesem Zeitpunkt auch assigned 7. Kommt er in die Routine TStadt.GetName (Haltepunkt setzen) 8. Wie sieht TStadt aus 9. Was macht TStadt.Create |
AW: Problem mit msvcrt.dll
Zum Ersten Bild, wo war da eigentlich grade die Codeausführung?
Wenn TStadt.Create, bzw. eigentlich die Zuweisung an die Variable "Temp" noch nicht ausgeführt war, dann steht in dieser Variable nunmal ein Zufallswert und demnach wäre es dort vollkommen Normal, daß da "Mist" angezeigt werden würde. Zitat:
Gibt es denn noch eine andere Stelle wo das Ding initialisiert wird? |
AW: Problem mit msvcrt.dll
Hey,
Bin gerade im Zug und nur mit Handy im Netz Deswegen kann ich keine sourcen zeigen. @himitsu Ja temp wurde vorher erstellt, und der Parameter heißt auch Test. Wegen aasigned war nur wegen der Sauberkeit. Das wird nirgendswo anders erstellt. @baumina 6) ja es ist auch zu diesen zeit Punkt assigned 7) ja kommt er rein. Dann steht im debugger bei Self auch solch ein komische. Wert. 8/9 kann ich dir erst heut Abend zeigen, da ich nur im Zug on bin. Ist aber eigentlich nichts spektakuläres. Klasse an sich paar Funktion und paar Variablen im private Bereich. Der constructor weiß auch nur werte den private Variablen zu. Genaueres zeige ich dir heut Abend. |
AW: Problem mit msvcrt.dll
Self.Name bzw. Self.ClassName zeigen auch Mist?
Wenn ja, dann sieht es erstmal so aus, als wenn die verwendete Instanz/Instanzzeiger futsch wäre, also von dem TErrechne in der Variable, über welche das AddStadt aufgerufen wurde. Pssst, Internet per WiFi freigeben und dann mit'm Schlepptop/Tablet. :zwinker: |
AW: Problem mit msvcrt.dll
Ja aber im Zug bzw im Bus habe ich schlecht Empfang, Nachteil wenn man aufm Land lebt ;-)
Ja und mein anscheinend nach verliert er wohl die Genaue Adresse im Arbeitsspeicher, aber ich kann mir nicht erklären warum ... Werde nachher mal das Projekt nachladen Wäre cool wenn ihr euch das mal anschauen könnt und ob ihr Fehler bekommt .. Fehler müsste schon beim Start des Formulars entstehen. Nicht wunder über Funktion etc. Es war halt noch in Entwicklung... ;) Ps. Arbeitskollege meinte Name könnte oft verwendet werden und ich möge die Parameter Namen doch bitte ändern, dass hatte leider auch kein erfolg. |
AW: Problem mit msvcrt.dll
Zitat:
Und selbst wenn da irgendwo im Code Millionen von Variablen/Eigenschaften/... mit dem gleichen Namen rumschwirren, der Parameter ist innerhalb der Methode im Scope und darum gibt es bei Name auch nur den und nichts anderes.
Delphi-Quellcode:
TFoo = class
Name : string; constructor Create( Name : string ); procedure Bar( Name : string ); end; constructor TFoo.Create( Name : string ); begin inherited Create; Self.Name { das Feld } := Name { der Parameter }; end; procedure TFoo.Bar( Name : string ); begin Self.Name { das Feld } := Name { der Parameter }; end; |
AW: Problem mit msvcrt.dll
Und mit dem Unitnamen kommt man auch noch an eine globale Variable "Name".
Ja, ich verwende sowas auch öfters, da ich nicht die Name Bezeichner komisch benennen oder mit Präfixen versehen will, aber wenn man das macht, dann muß man eben auch aufpassen, daß man auch immer das Richtige erwischt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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-2025 by Thomas Breitkreuz