AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Aus Pointer Varialbe wiederherstellen funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Aus Pointer Varialbe wiederherstellen funktioniert nicht

Ein Thema von Coder1990 · begonnen am 14. Jul 2008 · letzter Beitrag vom 14. Jul 2008
Antwort Antwort
Benutzerbild von Coder1990
Coder1990

Registriert seit: 3. Nov 2007
116 Beiträge
 
Delphi 2005 Personal
 
#1

Aus Pointer Varialbe wiederherstellen funktioniert nicht

  Alt 14. Jul 2008, 01:16
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:
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;
Der Fehler kommt im Destructor .. ist irgendwas mit adresse nicht auslesbar oder so...
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 ..
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#2

Re: Aus Pointer Varialbe wiederherstellen funktioniert nicht

  Alt 14. Jul 2008, 01:38
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:
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;
Der Zweite Teil: der Destructor (es ist viel Besser das OnDestroy-Event dafür zu nutzen - dafür ist es ja da )
Delphi-Quellcode:
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;
(Alles ungetestet, da Delphi gerade nicht offen)

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
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Aus Pointer Varialbe wiederherstellen funktioniert nicht

  Alt 14. Jul 2008, 01:51
1)
Zitat von Coder1990:
ist irgendwas mit adresse nicht auslesbar oder so...
Prima, dann wird da wohl etwas falsch sein oder so... Ist ja nicht so, dass der Wortlaut einer Fehlermeldung irgendwie sinnvolle Information in sich tragen könnte, gell?

2)
Zitat von Coder1990:
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 ...
Wenn du im Destruktor deiner Mainform etwas änderst, und daraufhin zur restlichen Laufzeit Fehler auftreten, schließe ich auf sehr schwerwiegende Konzeptfehler.

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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Coder1990
Coder1990

Registriert seit: 3. Nov 2007
116 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Aus Pointer Varialbe wiederherstellen funktioniert nicht

  Alt 14. Jul 2008, 02:21
@ 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 .

2. Wie konnte mir das passieren?
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.

3. Man ich hab bei der Benutzung der Stringlist noch diese procedures gesehen und hab mir noch sowas gedacht
-> wenn ich das gewusst hätte verdammt^^ - dann war das ja mit den pointern eh vergebens, wenn ich die referenz auch so hinkrieg^^

Event übersehen
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 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 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

Hallo ich heiße Anton und mache Rechtschreibflames ... usw.
Bild

// edit:
code noch "bissl" ausgebessert, jetzt kommt der fehler am ende nicht mehr
Danke an beide, vor allem an littleDave
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#5

Re: Aus Pointer Varialbe wiederherstellen funktioniert nicht

  Alt 14. Jul 2008, 03:00
Zitat von Coder1990:
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 .
Auch wenn man alleine Arbeit ist die Code-Formatierung wichtig. Selbst bei kleinen Sachen findet man sich viel schneller im Code zurrecht und kann sich somit schneller an die Fehlerbeseitigung wagen. Im Moment meckern ja nur wir (die Forenuser) dich an, aber wenn du im späteren Berufsleben auch mal programmieren solltest - und das auch noch im Team - dann wirst du richtig große Probleme bekommen. Dann ist es fast schon zu spät sich eine ordentliche Formatierung anzugewöhnen - in der Hinsicht: früh übt sich. Ich würd die eine ordentliche Formatierung wirklich ans Herz legen - damit kann man auch etwas Eindruck schinden und andere sind dann wirklich motivierter, dir zu helfen.

Zitat von Coder1990:
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 juhu^^
Naja, ein Neustart von Delphi ist vielleicht die Kanonen-auf-Spatzen-Methode. Was sehr oft hilft, ist einfach das Projekt neu erzeugen zu lassen (im Menüpunkt "Projekt", wenn ich mich gerade nicht irre). Dann wird alles neu kompiliert und somit auf den aktuellsten Stand gebracht.

Zitat von Coder1990:
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...
Mit der Addresse kann man unter umständen schon sehr viel Anfangen. Wenn z.B. bei der Zugriffsaddresse was mit 0x00000000 ( + einen Offset) darsteht, kann man sehr schnell sagen, dass ein Objekt z.B. nicht mehr existiert. Wenn z.B. eine "willkürliche" Addresse darsteht, dann kann man den Fehler auch schon eingrenzen - Speicherbereich ist bereits Freigegeben, aber ein Pointer/eine Referenz zeigt noch zu dem Speicherbereich) oder es wurde zu wenig Speicher angefordert (z.B. bei TFileStream.Read, wenn man als Puffer ein array[0..512] of byte angibt, aber als Size 1024 angibt - der Fehlertyp ist dabei natürlich auch noch sehr wichtig!

Zitat von Coder1990:
3. oben schon dargestellt .. (littleDave schien nicht so negativ ~~)
ich versuch immer freundlich zu bleiben

Zitat von Coder1990:
5-42
kurz und knackig aus zeitgründen bzw. bin Pfälzer
Das ist aber keine Entschuldigung. Ich finde, dass man sich schon etwas mühe beim schreiben geben sollte. Mir passieren auch oft Fehler, aber ich (hoffe), dass die sich nicht zu sehr häufen. Immerhin willst du Hilfe bekommen und Anhand der Rechtschreibung/Wortwahl kann man schon das Engagement des Frage-Stellers herauslesen. Wenn ich dann lese Boa krass eeeii, dre will nch so wi ich wll - auhc meine Brüderz konten dem sch*** Feler nix Angts machn. Leutz ich need mal eure Hilfe eeeii (ok, ist jetzt etwas übertrieben - ist ja nur ein Beispiel ), dann benutz ich als erstes die "Zurück"-Taste des Browsers.

Grüße
Dave
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Aus Pointer Varialbe wiederherstellen funktioniert nicht

  Alt 14. Jul 2008, 04:29
Zitat von Coder1990:
(littleDave schien nicht so negativ ~~)
Jeder hat eine unterschiedliche Schmerzgrenze. Aber allein die Tatsache, dass er es erwähnt, macht es finde ich überdenkenswert. Dass du das (angeblich) in der Form gut lesen kannst (wie erkennst du Blöcke auf die Schnelle?!) ist zwar schön für dich, aber sobald man mit anderen zusammen arbeiten will, und Code in ein Forum stellen kommt dem schon sehr nahe, sollte man sich schon an gewisse Styleguides halten - und der von Borland direkt dürfte wohl der passenste für den "öffentlichen" Gebrauch sein. Das ist auch weniger eine Könnens-, als viel mehr eine Höflichkeitsfrage.

Zitat von Coder1990:
4.1 mein prog soll nie eine speicherfunktion bekommen
Dass irgendwo darin eine Stringlist vorkam, brachte mich auf den Weg. Ich könnte mir auch ehrlich gesagt keinen anderen Grund vorstellen, weswegen man Pointer gerade als String speichern möchte. Völlig abstrus

Zitat von Coder1990:
4.2 das pointer in dieser situation wohl unnütz waren hab ich schon oben dargelegt
Naja, in gewisser Weise hast du ja schon gefragt, ob das mit den Pointern die richtige Idee war. Wenn du das schon wusstest, warum fragen?

Zitat von Coder1990:
kurz und knackig aus zeitgründen bzw. bin Pfälzer
Wenn du keine Zeit hast, deine Fragen in leserlicher Form zu stellen, warum sollte sich dann jemand die Zeit nehmen, sie zu beantworten? Wer will denn hier was von wem? Ich bin übrigens Ruhrpöttler. Dat heiss ja nu abba nich, dassich gleich so aufm Papier rotz wie wennich mit vierfünf Pilsken inner Plautze mit meine Kumpels wat bequatsch.

Zitat von Coder1990:
Hallo ich heiße Anton und mache Rechtschreibflames ... usw.
Bild
Der Hit ist, dass noch nicht einmal der Link funktioniert, bzw. statt Bild "error.jpg" angezeigt wird. Ich kenne jedoch das Bild, und ganz ehrlich: Wer so auf berechtigte Hinweise zu einem Minimum an Kommunikationsgrundlage reagiert, hat keine Hilfe jeglicher Form verdient. Von mir wirst du jedenfalls nichts mehr sehen.


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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Aus Pointer Varialbe wiederherstellen funktioniert nicht

  Alt 14. Jul 2008, 10:13
Zitat von Coder1990:
@ 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 .
Kleiner Tipp für die Faulen (da zähle ich mich manchmal auch dazu): Jedi CodeFormat existiert, und rückt Dir Deinen Code mit nur zwei Mausklicks ordentlich ein (und noch viel viel mehr, nur Kaffee kochen kanns nicht)


Zitat von Medium:
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.
Mit dem Eindruck bist Du beileibe nicht der einzige. Mir fällt dazu immer das hier ein...

Edith sagt "nobody expects the roter Kasten!"
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz