AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi vergisst die Werte der Eigenschaften meiner Klasse
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi vergisst die Werte der Eigenschaften meiner Klasse

Ein Thema von Andre93 · begonnen am 25. Aug 2011 · letzter Beitrag vom 19. Sep 2011
Antwort Antwort
Andre93

Registriert seit: 10. Jun 2010
15 Beiträge
 
Delphi 6 Personal
 
#1

AW: Delphi vergisst die Werte der Eigenschaften meiner Klasse

  Alt 25. Aug 2011, 18:45
hey super!
das funktioniert!!
vielen vielen Dank für die schnelle hilfe.
ich hätte nie damit gerechnet dass ich so schnell eine antwort bekomme.
echt klasse.
kannst du mir vielleicht erklären warum das so geht und warum anders nicht. mit diesen ganzen pointer geschichten habe ich nämlich noch ab und zu so meine probleme. vor allem verstehe ich nicht ganz warum probleme bei den anderen eigenschaften auftreten, weil der move befehl macht ja überhaupt nichts mit diesen eigenschaften. für den sind ja eigentlich nur data, _data und die größe meines datenpaket wichtig.
würde mich echt mal interessieren, aber bis hier erst einmal danke das hat mir schon sehr geholfen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi vergisst die Werte der Eigenschaften meiner Klasse

  Alt 25. Aug 2011, 18:49
Du willst doch den Inhalt kopieren und da Move als VAR/CONST Parameter deklariert ist, mußt du deine Zeiger erst dereferenzieren, damit der Inhalt übergibt wird.

Ohne Dereferenzierung kopierst du die Zeiger und nicht das worauf die Zeiger zeigen.

Bei RealSize > SizeOf(Pointer) handelst du dir dann auch noch einen Bufferoverrun ein.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Andre93

Registriert seit: 10. Jun 2010
15 Beiträge
 
Delphi 6 Personal
 
#3

AW: Delphi vergisst die Werte der Eigenschaften meiner Klasse

  Alt 25. Aug 2011, 21:38
@himitsu
ich hab da noch mal ein paar fragen
du hast geschrieben:
Zitat:
Und wurde schonmal über Input was zugewiesen, wird bei nächster Zuweisung das vorherrige ignoriert und nicht freigegeben.
also muss ich bevor ich ein weiteres mal input mache, um die gespeicherten werte zu verändern, vorher den speicherbereich der meine alten werte beinhaltet wieder freigeben? das mach ich einfach mit FreeMem(_Data); oder?

Und du meintest :
Zitat:
Der von Output reservierte Speicher wird nicht freigegeben.
In Output reserviere ich doch den Speicherbereich auf den der pointer zeigt den ich beim aufruf von output übergebe. wenn ich diesen speicher gleich wieder freigebe, dann gebe ich doch das wieder frei was so zu sagen mein "rückgabewert" ist. und mit diesem "rückgabewert" will ich ja nach dem aufruf von output weiterarbeiten, da wäre es ja schlecht wenn der schon wieder freigegeben ist, oder? Tut mir leid, ich schätze ich habs falsch verstanden, weil mir hier evtl. ein paar grundlagen in sachen gesetzmäßigkeiten von übergaben usw. fehlen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#4

AW: Delphi vergisst die Werte der Eigenschaften meiner Klasse

  Alt 26. Aug 2011, 07:09
Als Faustregel gilt: 1 GetMem -> 1 FreeMem, 1 New -> 1 Dispose
Wo man das macht hängt davon ab, wie lange man die Daten braucht, aber irgendwo muss es sein (zur Not im Destruktor).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Delphi vergisst die Werte der Eigenschaften meiner Klasse

  Alt 27. Aug 2011, 01:05
Mir scheint du bist mit einem TMemoryStream oder TStringStream besser bedient als mit deiner eigenen Klasse.
Du könntest auch ein TMemoryStream-Objekt innerhalb deiner eigenen TData-Klasse benützen.
  Mit Zitat antworten Zitat
Andre93

Registriert seit: 10. Jun 2010
15 Beiträge
 
Delphi 6 Personal
 
#6

AW: Delphi vergisst die Werte der Eigenschaften meiner Klasse

  Alt 29. Aug 2011, 19:44
hey,
bis hierher schon mal vielen dank an alle...
im moment hab ich noch ein anderes problem. das ist wahrscheinlich ein ganz einfacher fehler aber ich sitze jetzt schon ne ganze weile dran und bekomme es nicht hin.

ich wollte nun nicht immer das gleiche abspeichern, sondern nun irgendeinen Text aus einem editfeld.
bloß in dem moment wo ich das array dynamisch erzeuge funktioniert es nicht mehr.

also das hier funktioniert noch :
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
 arB : array[0..10] of Byte;
 I, Len : Integer;
begin
 len := length(Edit1.Text);
 for I := 0 to len - 1 do
  arB[I] := ord(Edit1.Text[I+1]);
 D.Input(@arB,len);
end;
da ist ja schon vorher die größe arrays festgesetzt.

Das hier geht allerdings nicht mehr:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
 arB : array of Byte;
 I,Len : Integer;
begin
 len := length(Edit1.Text);
 GetMem(arB,len);
 for I := 0 to len - 1 do
  arB[I] := ord(Edit1.Text[I+1]);
 D.Input(@arB,len);
 FreeMem(arB,len);
end;
da liefert "output" nicht mehr die richtigen werte, sondern irgendwelche anderen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#7

AW: Delphi vergisst die Werte der Eigenschaften meiner Klasse

  Alt 30. Aug 2011, 02:23
GetMem?
Delphi-Referenz durchsuchenSetLength

Welche Delphiversion nutzt du nochmal? (PS: sowas kann man auch gleich mit im Foren-Profil mit nennen)
Seit Delphi 2009 ist ein SizeOf(Char) = 2 und nicht SizeOf(Byte).
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (30. Aug 2011 um 02:27 Uhr)
  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 04:13 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