AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Zugriffsverletzung beim Kürzen eines dyn. Arrays
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung beim Kürzen eines dyn. Arrays

Ein Thema von roadrunner-S51 · begonnen am 25. Jan 2012 · letzter Beitrag vom 25. Jan 2012
 
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Zugriffsverletzung beim Kürzen eines dyn. Arrays

  Alt 25. Jan 2012, 11:01
Das Array ist folgendermaßen aufgebaut:

Delphi-Quellcode:
  Sortierung = Record
  iRegalPlatz : Integer; // Regalplatz-Nr.
  iPosiPlatz : Integer; // Kistenplatz-Nr. im Regalplatz
  iKistePlatz : Integer; // Kisten-Nr.
  iStueckPlatz : Integer; // Stückzahl in der Kiste
  Datum : TDateTime; // Einlagerungsdatum
  Barcode : String; // Inhalt des Strings des Barcodes
  end;

  FeldPlatz : Array of Sortierung;
Also funktionieren tut es insgesamt schon. Nur eben wenn AIndex 0 ist, bzw. das Feld die Länge 1 hat, tritt der Fehler auf.
Und du hast nicht $H-/$LONGSTRINGS OFF, d.h. Barcode ist ein referenzgezählter Typ? Dann verursacht das Move Probleme, selbst wenn du sie nicht sofort um die Ohren geknallt kriegst. Überleg mal: Angenommen Feldplatz hat noch zwei Elemente und du rufst Loesche_Array_Element(0) auf. Dann wird der Record Feldplatz[1] auf Feldplatz[0] ge-move-t, d.h. Feldplatz[0].Barcode und Feldplatz[1].Barcode verweisen auf den gleichen String, haben aber trotzdem nur Referenzzähler 1. Beim nachfolgenden Aufruf von SetLength wird Feldplatz[1] finalisiert, was insbesondere den Referenzzähler von Feldplatz[1].Barcode dekrementiert und, da 0 rauskommt, den String entsorgt. Dummerweise zeigt Feldplatz[0].Barcode jetzt auf einen freigegebenen Speicherbereich. Das kracht nicht zwangsweise sofort, ist aber trotzdem übel.
Uli Gerhardt
  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 21:30 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