Thema: Delphi Farbwert zu Dezimal

Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#71

AW: Farbwert zu Dezimal

  Alt 1. Apr 2019, 23:16
@Emil.
Kann sein ich habe da etwas gefunden, was ein Grund für Exceptions sein könnte.
Am Ende von #64 schrieb ich:

Zitat:
Delphi-Quellcode:
procedure TSpectrum.SetSymmetrical(const Value: BOOL);
begin
   FSymmetrical := Value;
   FillChar(SpectrumData2D[0], sizeof(SpectrumData2D), 0);
   CreateSpectrumBitmap;
   CreateMap;
end;
Mit FillChar(SpectrumData2D[0], sizeof(SpectrumData2D), 0); willst Du vermutlich alle Bytes in SpectrumData2D = 0 setzen.
Tust du aber nicht!
Deine Erwartung ist sicherlich, dass SizeOf(SpectrumData2D) die Größe des Speicherbereiches von SpectrumData2D ist.
Damit hättest Du auch Recht, wenn SpectrumData2D ein statisches Array wäre.
Da es sich aber um ein dynamisches Array handelt, ist SizeOf(SpectrumData2D) = 4.
Schon als ich das schrieb hatte ich das Gefühl dass da noch mehr ist und habe das deshalb noch mal überprüft.
Wenn du an FillChar SpectrumData2D[0] als StartAdresse übergibst, dann werden nicht die Daten in SpectrumData2D[0] gelöscht, sondern die in SpectrumData2D enthaltenen dynamischen Arrays, beginnend mit SpectrumData2D[0].
Bei Count=4 wird das Array SpectrumData2D[0] zerstört und wenn dann später darauf zugegriffen wird hagelt es Exceptions.
Außerdem wird ein Memory Leak erzeugt.

Setz mal einen Breakpoint auf die Zeile mit FillChar(SpectrumData2D[0], sizeof(SpectrumData2D), 0);
Wenn dann dort angehalten wird geh mit der Maus auf SpectrumData2D und schau dir an, wie das dargestellt wird.
Dann führe das FillChar mit F7 aus und danach gehe wieder auf SpectrumData2D.
In der anhängenden Abbildung siehst du wie es vor und nach Ausführung von SpectrumData2D ist.
Bei SpectrumData2D[0] kannst du sehen, dass nach dem FillChar keine Daten mehr da sind.
Ob das jetzt die Ursache für alle Probleme ist weiß ich nicht, aber zumindest ist das eine der Ursachen.
Miniaturansicht angehängter Grafiken
spectrumdata2d.jpg  
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....

Geändert von Amateurprofi ( 1. Apr 2019 um 23:46 Uhr)
  Mit Zitat antworten Zitat