Wie behebt man den Fehler von Delphi 10 mit TList_AnyDynamicArrays_?

8

Ich bin über einen Fehler in Delphi 10 Seattle Update 1 gestolpert. Nehmen wir den folgenden Code:

%Vor%

Auf den ersten Blick sieht es so aus, als ob TList<T> die Lebensdauer der darin enthaltenen dynamischen Arrays nicht richtig verwaltet, aber es funktioniert auch gut, wenn es in 64 Bits kompiliert wird, es stürzt nur in 32 Bits ab (I zu verstehen, bedeutet nicht, dass der Fehler nicht in 64 Bits vorhanden ist ...).

Beachten Sie, dass SplitString verwendet wurde, weil die erste Funktion ein dynamisches Array zurückgegeben hat, das mir in den Sinn kam. Das ursprüngliche Problem wurde mit TList<TBookmark> gefunden, das das gleiche Problem aufweist.

Es ist möglich, den Fehler zu umgehen, indem Sie die Prozedur Button1Click wie folgt umschreiben:

%Vor%

Aber alle meine Anwendungen zu umgehen, um sie zu modifizieren, um diesen Fehler zu umgehen, wäre nicht wirklich meine bevorzugte Option. Ich würde viel lieber die anstößige Routine finden und wenn möglich in den Speicher packen.

Wenn jemand auf dieses Problem gestoßen ist und einen Workaround gefunden hat, wäre ich dankbar. Andernfalls poste ich meins, wenn / wenn ich eine geeignete Abhilfe finde.

Bitte kommentieren Sie auch, ob das Problem in Berlin noch besteht.

    
Ken Bourassa 08.12.2016, 19:51
quelle

1 Antwort

8

Schließlich war der Fehler immer noch in 64 Bits vorhanden. Es ist nicht für TStringDynArray abgestürzt, aber für andere dynamische Array-Typen.

Die Quelle des Problems befindet sich im folgenden Code in Generics.Collections :

%Vor%

Was passiert ist, wird die falsche TypeInfo an DynArrayClear übergeben. Im Fall von TList<TStringDynArray> wird TypeInfo(TArray<TStringDynArray>) anstelle von TypeInfo(TStringDynArray) übergeben. Von dem, was ich sagen kann, ist der richtige Anruf:

%Vor%

Da die Prozedur privat ist, ist das Abfangen kompliziert. Ich tat dies mit der Tatsache, dass der Record-Helfer immer noch auf den privaten Teil der Datensätze in Delphi 10 zugreifen kann. Ich denke, dass es für die Berliner Benutzer komplizierter wird.

%Vor%

Hoffentlich wird Embarcadero es eines Tages reparieren ...

    
Ken Bourassa 08.12.2016, 21:43
quelle

Tags und Links