AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit SetLength() unter Wine, nicht aber unter Windows
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit SetLength() unter Wine, nicht aber unter Windows

Ein Thema von MStoll · begonnen am 3. Mär 2009
Antwort Antwort
MStoll

Registriert seit: 15. Nov 2005
131 Beiträge
 
Turbo Delphi für Win32
 
#1

Problem mit SetLength() unter Wine, nicht aber unter Windows

  Alt 3. Mär 2009, 20:14
Hallo,

ich habe ein seltsames Problem. Ich habe eine Software zur Ergebniserstellung für Motorsportveranstaltungen geschrieben. Da hat man je nachdem, wie weit die Veranstaltung fortgeschritten ist, unterschiedlich große Datenmengen.
Um das mal etwas formal zu beschreiben (nur so kann ich präzise sein):

Zu einem Zeitpunkt t haben wir eine Datenmenge d (als Array), zu einem späteren Zeitpunkt t2 haben wir die Datenmenge d2, wobei d eine Teilmenge von d2 ist (d.h. d ist quasi der Anfang von d2).
Nun werden im Zuge der Ergebniserstellung erstmal alle Daten in einem Array a1 gespeichert und dann nach Kriterien umverteilt in andere Arrays (a2, a3,...). Kommen wir zum Punkt: Im Zuge dessen werden Elemente aus a1 wieder gelöscht. Das passiert mit folgender Funktion:

Delphi-Quellcode:
procedure delete_arr_item(var arr : ta_daten; index : integer); overload;
var x : integer;
begin
     for x := index + 1 to high(arr) do
         arr[x-1] := arr[x];
     SetLength(arr, Length(arr)-1);
end;
ta_daten ist ein record, der im wesentlichen Strings, Integers und Bytes enthält. Keine Objekte, keine Pointer (abgesehen von den Strings).

Unter Windows (XP) funktioniert diese Funktion immer. Unter Wine hatte ich das Problem, das das SetLength unter Wine bei bestimmten Datenmengen d eine "Ungültige Zeigeroperation" wirft, bei einer größeren Datenmenge d2, die d enthält, nicht.

Meine Lösung des Problems:
ersetze SetLength(arr, Length(arr)-1) durch arr := copy(arr, 0, high(arr)).

So geht's unter Wine.

Kennt jemand ein ähnliches Problem und hat eine Begründung, warum das unter Wine manchmal Probleme macht?
Falls ihr noch genauere Erläuterungen braucht, kein Problem, fragt einfach.

Gruß
Michael
"Man soll nie mehr essen als mit Gewalt reingeht!" (n.n.)
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:57 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