![]() |
Aus Pointer Varialbe wiederherstellen funktioniert nicht
Seas,
Delphi-Quellcode:
procedure TFmain.AddFileToSL(filename:string);
var id:P_TID3Tag; TID:TID3Tag; begin TID:=TID3Tag.Create; id^:=TID; // vorher hatte ich das mal so: "id:=@TID" - ging auch nicht if TID.ReadTag(filename) then begin self.SL_Path.Add(filename); self.SL_point.Add(inttostr(integer(id))); with self.SG_1 do begin Cells[0,RowCount]:=ExtractFileName(filename); Cells[1,RowCount]:=TID.Titel; Cells[2,RowCount]:=TID.Artist; Cells[3,RowCount]:=TID.Album; RowCount:=RowCount+1; end; end else begin TID.Free; end; end;
Delphi-Quellcode:
Der Fehler kommt im Destructor .. ist irgendwas mit adresse nicht auslesbar oder so...
destructor TFMain.destroy;
var i:integer; id:P_TID3Tag; TID:TID3Tag; begin for i:=0 to self.SL_Point.count do begin id:=P_TID3Tag(strtoint(self.SL_Point.Strings[i])); TID:=id^; TID.free; end; self.SL_Path.Free; self.SL_Point.Free; inherited destroy; end; achja ich hab den code jetzt minimal modifiziert (den destructor), konnte es aber nicht mehr testen da nun überall in meinem programm andere fehler auftauchen, nachdem ich mehrmals die fehler meldung beim destructor bekommen hab (speicher iwie voll geschrieben oder wat?^^), vll geht mein restlicher code morgen nach nem reboot wieder ... Also im groben speichert meine procci da oben einfach nen pointer als integer als string in ner stringlist und dieser wird später wieder als string als integer geladen und versucht wieder als pointer die variable wiederherzustellen falls ich hier iwas an pointern falsch verstanden habe so .. :wall: :wall: :wall: :wall: |
Re: Aus Pointer Varialbe wiederherstellen funktioniert nicht
Moin moin,
was ich dir unbedingt empfehlen würde ist eine ordentliche Code-Formatierung - ich hab den Quelltext kaum bis garnicht verstehen können. Zweites großes Problem: In Zeile 7 des zweiten Quelltextteils: for i:=0 to self.SL_Point.count do Du gehst in der Liste zu weit - du musst bis SL_Pointer.Count - 1 gehen! Drittes Mankro: ich geh mal davon aus, dass SL_Path eine normale StringList ist. Du kannst zu jedem Eintrag in der StringList noch ein Zusatzobjekt hinzufügen. Das geht mit SL_Path.AddObject( den_string, das_objekt ). Somit kannst du die beiden Sachen - Pfad und Object-Instanz zusammen speichern. Nun aber zum eigentlichen Problem: Wieso machst du eigentlich den Umweg über ein Pointer auf einen Pointer? An sich ist die Sache doch relativ simpel zu lösen: Der Erste Teil: Erstellung und Speicherung der Daten
Delphi-Quellcode:
Der Zweite Teil: der Destructor (es ist viel Besser das OnDestroy-Event dafür zu nutzen - dafür ist es ja da :zwinker:)
procedure TFmain.AddFileToSL(FileName: string);
var id3Tag : TID3Tag; begin id3Tag := TID3Tag.Create; if id3Tag.CreateTag(FileName) then begin SL_Path.AddObject(FileName, id3Tag); // hier der Rest mit den String-Grid end else id3Tag.Free; end;
Delphi-Quellcode:
(Alles ungetestet, da Delphi gerade nicht offen)
destructor TFMain.destroy;
var i : integer; id3Tag : TID3Tag; begin for i:=0 to SL_Path.Count-1 do begin id3Tag := TID3Tag(SL_Path.Objects[i]); id3Tag.Free; // ich weiß gerade nicht, ob die StringList die übergebenen Objekte // beim leeren auch automatisch freigibt. Daher setzt ich in diesem // Beispiel sicherheitshalber die Variable auf nil - somit weiß die // StringList (und auch dein Programm) - dass sich hier kein gültes // Objekt mehr befindet SL_Path.Objects[i] := nil; end; SL_Path.Free; inherited destroy; end; Ich hab dir jetzt zwar eine relativ fertige Lösung gegeben, aber ich wollt dir halt zeigen, was ich unter Code-Formatierung von oben meine. Vielleicht findest du den Code so auch besser lesbar :zwinker: |
Re: Aus Pointer Varialbe wiederherstellen funktioniert nicht
1)
Zitat:
2) Zitat:
3) Deine Codeformatierung ist wie die, deines Fließtextes. Unlesbar, und es wird keiner Freude daran haben dieses Gewirre nach Fehlern abzusuchen. 4) In Verbindung mit Objekten kann man sich fast immer die Umwege über untypisierte Pointern sparen, da eine Objektvariable bereits nichts weiter ist, als ein Pointer (dann "Referenz" genannt) auf den Anfang des entsprechenden Objektes im Speicher. Falls du vor hast, was ich wegen in Punkt 3) genannter Umstände nur vage vermuten kann, diese Referenzen in eine Datei zu speichern, um bei einem späteren Start deines Programmes wieder darauf zuzugreifen, dann hast du eine Menge an Pointern falsch verstanden. 5-42) "iwie", "iwas" und "vll" kennt mein Duden nicht, ebensowenig aktuelle Listen an "quasi anerkannten Internetslangs". Ausserdem kennt die deutsche Sprache solche Feinheiten wie Groß-/Kleinschreibung und Interpunktion, auch in Foren. Edith beauftragt gleich morgen einen Privatdetektiv, der sich auf die Suche nach dem roten Kasten machen soll. |
Re: Aus Pointer Varialbe wiederherstellen funktioniert nicht
@ Little Dave
1. Ja, auf das mit der Codeformatierung bin ich auch schon mehrmals hingewiesen worden ;), aber ich kann formatierten Code ähnlich gut lesen wie nicht-formatierten.. und da ich es meißt bei kurzen codestücken belasse, hab ich da keine Probleme mit. Wenn ich das nächste mal was poste, formatier ichs vll lieber vorher, dass die Leser dass auch verstehen :D ;). 2. :D Wie konnte mir das passieren? :D Das lustige an der Sache ist, dass ich genau an das (!!) gedacht habe, aber dies dann anscheinend während meinen schnellen Versuchen Fehler zu beheben, mitweggewischt habe. :D 3. Man :D ich hab bei der Benutzung der Stringlist noch diese procedures gesehen und hab mir noch sowas gedacht :D -> wenn ich das gewusst hätte :D verdammt^^ - dann war das ja mit den pointern eh vergebens, wenn ich die referenz auch so hinkrieg^^ Event übersehen :D naja da ich mich eh im mom grad in klassen und so eingelesen und da hab ich mir doch glatt gedacht, modifizieren wir doch das event :D naja gut so gehts ja besser Problem besteht an diesem Punkt weiterhin: Beim beenden des Programms krieg ich einen fetten Zugriffs Error obwohl ich die ganzen Objekte die ich selbst "created" habe auch wieder "gefreed" habe -> Delphi neu gestartet und die komischen Fehler die im Script drin entstanden sind, sind nun wieder weg :D juhu^^ @Medium 1. Überraschung, nur kriege ich diese Errormeldung oft genug und habe mir doch glatt gedacht dass das Stichwörtchen "Adresse" wohl den meisten gleich sagen wird um was für einen Sachverhalt es wohl geht... 2. oben schon dargestellt .. 3. oben schon dargestellt .. (littleDave schien nicht so negativ ~~) 4.1 mein prog soll nie eine speicherfunktion bekommen 4.2 das pointer in dieser situation wohl unnütz waren hab ich schon oben dargelegt 5-42 kurz und knackig aus zeitgründen bzw. bin Pfälzer ;) :D Hallo ich heiße Anton und mache Rechtschreibflames ... usw. ![]() // edit: code noch "bissl" ausgebessert, jetzt kommt der fehler am ende nicht mehr Danke an beide, vor allem an littleDave |
Re: Aus Pointer Varialbe wiederherstellen funktioniert nicht
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Grüße Dave |
Re: Aus Pointer Varialbe wiederherstellen funktioniert nicht
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Manometer, warum habe ich den Eindruck, dass schon die unglaublich simple Aufgabe eine Frage brauchbar zu stellen, so viele, meist jüngere, vor so ein großes Problem stellt? Und warum muss man seine Defizite derart verteidigen, statt sie zu beseitigen? Kein Wunder, dass die deutsche Wirtschaft nach Leuten japst, die wenigstens gewisse Basiskompetenzen mitbringen. |
Re: Aus Pointer Varialbe wiederherstellen funktioniert nicht
Zitat:
Zitat:
![]() Edith sagt "nobody expects the roter Kasten!" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:15 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