AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi EInvalidPointer bei verschachtelten dynamischen Arrays
Thema durchsuchen
Ansicht
Themen-Optionen

EInvalidPointer bei verschachtelten dynamischen Arrays

Ein Thema von alkan · begonnen am 14. Sep 2008 · letzter Beitrag vom 15. Sep 2008
 
alkan

Registriert seit: 8. Aug 2008
7 Beiträge
 
#1

EInvalidPointer bei verschachtelten dynamischen Arrays

  Alt 14. Sep 2008, 20:52
Ich verwende in meinem Programm u.a. folgende Objekte:


Delphi-Quellcode:
  TTicket = class
  [...]
 
  TTicketBatch = class
  public
    TicketCount: integer;
    Ticket: array of TTicket;
    procedure AddTicket(InTicket: TTicket);
    procedure Obfuscate(Seed: string; TicketType: byte);
    function GetMasterHash: string;
  end;

  TTicketBatchManager = class
  public
    OwnID: cardinal; // ID of our own node
    BatchCount: integer;
    Batch: array of TTicketBatch;
    constructor Create(InOwnID: cardinal);
    procedure AddTicketBatch(InTicketBatch: TTicketBatch); overload;
  [...]
Die folgende Prozedur läuft zwar noch reibungslos ab:

Delphi-Quellcode:
  procedure TTicketBatchManager.AddTicketBatch(InTicketBatch: TTicketBatch);
  begin
    // Creates a new batch as well as a list entry
    inc(BatchCount);
    SetLength(Batch, BatchCount);
    Batch[BatchCount] := TTicketBatch.Create;
  end;
Wenn in einem zweiten Schritt nun die Grösse des dynamischen Arrays Ticket festgelegt wird...

Delphi-Quellcode:
  procedure TTicketBatch.AddTicket(InTicket: TTicket);
  begin
    inc(TicketCount);
    SetLength(Ticket, TicketCount);
    Ticket[TicketCount-1] := TTicket.Create;
    Ticket[TicketCount-1] := InTicket;
  end;
führt das zu diversen nicht immer reproduzierbaren Fehlermeldungen ("invalid pointer operation" oder Zugriffsverletzung), seltsamerweise meistens erst nach Beendigung des Programms.

Ich bin nun verunsichert, ob mein Vorhaben auf diese Weise realisierbar ist. Kann man denn überhaupt ein dynamisches Array auf einen Objekt-Datentyp setzen, der seinerseits dynamische Arrays enthält und deren Länge erst zu einem späteren Zeitpunkt bestimmt wird als die Grösse des übergeordneten Arrays?

Wenn ich mir das so durch den Kopf gehen lasse, erscheint mir das ganze als ein Ding der Unmöglichkeit. Denn woher soll der Compiler wissen, wie viel RAM er für das Array Batch reservieren soll, wenn noch nicht festeht, welche Länge die einzelnen Unterelemente vom Typ TTicket ihrerseits haben werden?

Kennt jemand einen Workaround für dieses Problem?

Besten Dank für eure Hilfe!
  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 07:42 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