Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#7

AW: Wann kann System.Copy(Array, Index, Count) eine Exception liefern?

  Alt 6. Mai 2011, 10:57
Habe es jetzt mal so gebaut, in der Hoffnung, dass es bei großen Arrays schneller ist als mein obiger Code: [...]
Da werden die Parameter StartIndex und Count aber nicht ausgewertet
Jo, schon gemerkt gehabt -- muss wohl am dem fehlenden Schlaf liegen. Man sollte einfach nicht die komplette nach durchcoden Trotzdem danke für den Hinweis!

(Von einem C-Compiler für Mikrocontroller bin ich es gewöhnt, dass der oft scheiße baut. Z.B. wenn man eine Variable hinzufügt. Fügt man noch eine hinzu, dann geht es wieder.)
Ist ja wie russisches Roulette So schön Optimierungen des Compilers auch sein mögen, es sollte aber doch möglichst funktionieren... Dann kann es ruhig einen kleinen Tick langsamer sein.

Habe mir jetzt auch mal die _DynArrayCopyRange angeschaut und siehe da, himitsu hatte recht.
Aber in Verbindung mit der RTTI vermute ich jetzt einfach mal, daß Die Generics da irgendwo Mist bauen (wie immer),
denn daraus werden ja die Informationen über den Aufbau der Daten geholt und damit auch über die Methode des Kopierens, bzw. die Speicherverwaltung.
An der Adresse, auf die zugegriffen wird, sollten eigentlich Typinformationen stehen, allerdings läuft da irgendwas ziemlich schief. Mal schauen, ob es nicht noch eine Rettung für den Spass gibt. Der Umstand der Kombination aus diesem netten Problem und der Position der Methode innerhalb der Methoden-Deklarationen, ist aber echt genial
Ist deine Instanz von TApDynamicArray vielleicht gar nicht initialisiert?
Ich denke, dass ich nicht mehr als das hier benötige, da es sich um einen record handelt, nicht um eine Klasse:
Delphi-Quellcode:
var
  A : TApDynamicArray<Integer>;
begin
  try
    // Some basics
    TTest.Print(A); // -> []
    SetLength(Tmp, 2);
    A := Tmp;
    TTest.Print(A); // -> [0;0]
    TTest.SetUnsortedData(A); // -> Setzt die Länge auf 10 und füllt das Array
    TTest.Sort(A); // <- in der Method wird Clone aufgerufen -> Exception
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat