AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Cast Array[0..x] of Byte in TBytes

Ein Thema von schwa226 · begonnen am 29. Jun 2011 · letzter Beitrag vom 30. Jun 2011
 
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#10

AW: Cast Array[0..x] of Byte in TBytes

  Alt 30. Jun 2011, 12:32
Auch wenn es sich im programmtechnischen Sinn um verschiedene Typen handelt (dynamisches vs. statisches Array), so liegen dennoch in beiden Fällen die Daten byteweise hintereinander. Damit haben sie sehr wohl das selbe Speicherlayout.
Das gilt sicher für die Nutzdaten, nicht aber für die Länge des Arrays und die Referenzzählung. Selbst wenn das im aktuellen Fall nicht relevant sein sollte, besteht immer die Gefahr, das dieses Konstrukt in einer zukünftigen Version nicht mehr funktioniert.

Das tatsächliche Speicherlayout kann man hier nachlesen. Das dynamische Array ist also ein Pointer auf die Nutzdaten, wobei der Bereich vor den Nutzdaten aber noch zum Array gehört. Demnach ist der Cast auf das statische Array einfach nur brandgefährlich, weil die 8 Byte vor dem Array nun als Größe und als Referenzzähler interpretiert werden. In dem Längenfeld kann alles möglich drinstehen und es kann sich sogar jederzeit ändern - heißt: die verwendete Länge passt nicht zur wirklichen Größe des Arrays. Dann kann es auch noch passieren, daß der Compiler dann noch bei der Referenzzählung das Array einfach frei gibt (das wird spaßig). Wenn es nicht crasht ist das einfach nur Glück.

Beiliegendes Projekt zeigt das ganz deutlich - und es crasht auch beim Beenden.

Insofern bleibe ich bei meiner Aussage, daß das Speicherlayout unterschiedlich ist.
Angehängte Dateien
Dateityp: zip Projekt88.zip (1,2 KB, 16x aufgerufen)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
 


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:49 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