![]() |
Funktion mit offenem Array: Freemem crasht bei _DynArrayClear
Ich habe folgenden Wunsch:
Gegen ist die folgende Datenstruktur:
Delphi-Quellcode:
wobei
type TDaten = packed reccord
x: TXArray; y: TYArray; end; var Daten: TDaten;
Delphi-Quellcode:
type TX = packed reord
a: integer; bArray: array of word; end; type TY = packed record cArray: array of TStringList; d: cardinal; end; TXarray = array of Tx; TYArray = array of Ty; Jetzt würde ich gerne in einer Funktion Daten befüllen: dazu habe ich die Unterfunktionen
Delphi-Quellcode:
BerechneAnzahlX und BerechneAnzahlY liefern Werte zwischen 0 und 10000. BerechneX und BerechneY setzen die festen Were und legen die Arraylängen fest und füllen die Arrays.
function MachXArray: TXArray;
var i: integer; begin setlength(result, BerechneAnzahlX); for i = 0 to BerecchneteAnzahlX - 1 do result[i] = BerechneX(i); end; function MachYArray: TYArray; var i: integer; begin setlength(result, BerechneAnzahlY); for i = 0 to BerecchneteAnzahlY - 1 do result[i] = BerechneY(i); end; function MachDaten; begin Daten.x := MachXArray; Daten.Y := MachYArray; end; Das ganze klappt manchmal, manchmal kommt aber beim Verlassen der Funktionen eine Zugriffsverletzung bei system._DynArrayClear und ich weiß momentan nicht, wie ich das ganze sauber hinbekomme. Mit geringen Arraaygrößen < 10 zum Testen klappt es immer, im Realbetrieb wenn auch mal ein paar Tausend Arrayelemente vorhanden sind crasht es irgendwann (immer an aderen Stellen). Ich vermute mal, dass ich ja von den Funktionen nur einen Zeiger auf die eigentlichen Arrays bekomme und beim Verlassen der Funktionen das Array freigegeben wird, aber später über den Zeiger den ich dann gespeichert habe auf bereits freigegebenen Speicher zugegriffen wird (oder so ähnlich). Wie könne man ein offenes Array mit samt seinem Inhalt sauber aus einer Funktion übergeben? würde ein New in der Funktion und einem type pXarray = ^TXarray und dann ein new(pXArray^); helfen? |
AW: Funktion mit offenem Array: Freemem crasht bei _DynArrayClear
Zitat:
Wenn du hier beim Posten Delphi Tags verwendest sieht dein Quelltext gleich viel besser aus und man kann alles ein bisschen besser lesen. Außerdem fehlen da noch ein paar Deklarationen und Funktionen. Wenn du die lieferst kommen wir sicher weiter. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:03 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