Autor |
Beitrag |
Luncustaf
      
Beiträge: 324
Win 2k
D7 Ent.
|
Verfasst: Di 15.04.03 10:54
hi hab hier ne tstringlist
Quelltext
die erzeuge ich in einem constructor
Quelltext 1: 2: 3: 4:
| constructor TReadHRt.create; begin ssave := TStringList.create; end; |
und greife später drauf zu
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| AssignFile(f,'HR_Info.txt'); {$i-} Reset(f); {$i+} if IOResult <> 0 then begin ShowMessage('Error'); Exit; end;//if while not eof(f) do begin readln(f,s); ssave.add(s); end; CloseFile(f); |
das komische ist - gestern hat das ganze noch getan (ohne constructor) und heute tut es nicht mehr hab bisher ma code nicht verändert nur eine neue procedure hinzugefügt die aber gar nichts mit dem code hier zu tun hat.
ich bekomm bei dem ssave.add(s) immer eine zugriffsverletzung :/
warum? - das komische ist gestern hats einwandfrei getan
gr€€tz
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Di 15.04.03 10:58
Breakpoint auf diese Zeile setzen und dann bei Erreichen des breakpoints den Mauszeiger auf ssave halten. Wenn als Hint nun ssave=nil erscheint, ist dies Stringliste noch nicht initialisiert.
Cu,
Udontknow
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Di 15.04.03 11:02
Nachtrag: Ist SSave ein Member der Klasse TReadHRt? Evtl. existiert auch dein Objekt vom Typ TReadHRt noch gar nicht! Wenn du den o.g. Breakpoint erreichst, drücke mal STRG+F7 und gib in die Zeile "Self" ein. Ist Self=NIL, dann hast du das noch gar nicht erstellt.
|
|
Luncustaf 
      
Beiträge: 324
Win 2k
D7 Ent.
|
Verfasst: Di 15.04.03 11:04
Quelltext 1:
| ssave = nicht verfübarer wert |
ehißt das gleiche wie nil nehme ich an - nun meine frage wieso? ich create die stringlist ja im constructor das heißt doch vor allem anderen - wenn ich die zeile
Quelltext 1:
| ssave := TStringList.create; |
in die gleiche procedure schreibe dann kommt die zugriffsverletzung beim create der TStringlist :/
woran kann das liegen?
gr€€tz
|
|
Luncustaf 
      
Beiträge: 324
Win 2k
D7 Ent.
|
Verfasst: Di 15.04.03 11:05
antwort auf nachtrag:
sers,
doch die klasse und der typ bestehen schon da ich die procedure aus ner anderen klasse aufrufe.
und ja ssvae ist ein member der klasse TReadHRt;
das komische ist ja das ich am code nichts verändert habe und doch heute der fehler kommt
gr€€tz
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Di 15.04.03 11:28
Zitat: | doch die klasse und der typ bestehen schon da ich die procedure aus ner anderen klasse aufrufe.
|
Das hat nichts zu bedeuten. Du kannst durchaus methoden von Objekten aufrufen, die gar nicht initialisiert sind. Hast du also auf self geprüft? "Nicht verfügbarer Wert" deutet nämlich genau daraufhin, dass Self (also der Eigentümer der Stringliste) nil ist.
Cu,
Udontknow
|
|
Luncustaf 
      
Beiträge: 324
Win 2k
D7 Ent.
|
Verfasst: Di 15.04.03 11:30
hi,
wenn ich das mit dem strg+f7 mache dann kommt in dem fenster darunter dann nil.
was heißt das? oder was hat das zu bedeuten?
gr€€tz
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Di 15.04.03 11:34
Nun es bedeutet, daß dein Objekt vom Typ TReadHRt, wie schon vermutet, noch gar nicht per "MeinObjekt:=TReadHRt.Create;" erstellt worden ist. Daher schlägt dann auch der Aufruf von "MeinObjekt.MeineProzedur" fehl. Gehe mal zu der Zeile, wo du die Prozedur dieses Objekts aufrufst (also in diese andere Klasse). Wieder mal Breakpoint setzen und "MeinObjekt" (oder wie immer es bei dir heisst) mit dem Mauszeiger anvisieren. Dort wird NIL stehen, das Objekt existiert dort also noch nicht.
Cu,
udontknow
|
|
Luncustaf 
      
Beiträge: 324
Win 2k
D7 Ent.
|
Verfasst: Di 15.04.03 11:44
achso
nu hab ich nen create davor gesetzt nu klappt das natürlich auch  ich wunder mich halt warum das dann gestern getan hat und nicht heute
auf jedenfall vielen vielen dank für deine hilfe  hat mich echt weitergebrahct und bin auch wieder ein bisschen schlauer
gr€€tz und thanks a lot
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Sa 19.04.03 14:32
Luncustaf hat folgendes geschrieben: | heißt das gleiche wie nil nehme ich an |
Nein. Nicht verfügbar heißt das die Ide nicht auf diesen Wert zugreifen kann. Eventl. ist die Code-Optimierung angeschaltet.
Gruß
Tino
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Di 22.04.03 08:53
@Tino:
In diesem Falle hat es nichts mit der Code-Optimierung zu tun. Der Member SSave des aktuellen Objekts ist nicht verfügbar, weil das aktuelle Objekt selbst NIL ist.
Self=NIL -> Self.IrgendeinMemberDieserKlasse : Nicht verfügbarer Wert
Cu,
Udontknow
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Di 22.04.03 09:11
Das SSave ein Member von TReadHrt ist habe ich überlesen. Dann wird wahrscheinlich wirklich die Meldung "Nicht verfügbarer Wert" erscheinen.
Gruß
Tino
|
|