Dynamische Arrays und Floats zwischen 2.2.4 und 2.4

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Dynamische Arrays und Floats zwischen 2.2.4 und 2.4

Beitrag von carli »

Hi,

habt ihr ne Ahnung, ob sich in der Behandlung von Floats (Datentyp single) und in der Behandlung von dynamischen Arrays etwas geändert hat zwischen 2.2.4 und 2.4?
Das Problem ist, dass der 2.4-Compiler unter Windows fehlerhaften (nicht funktionieren) Code erzeugt, ich weiß aber nicht, was genau, mangels eigenem Windows.

Wisst ihr, was sich geändert haben könnte? (Oder gibt es irgendwo eine zusammengefasste Changelog-Liste?)

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Dynamische Arrays und Floats zwischen 2.2.4 und 2.4

Beitrag von theo »

carli hat geschrieben:Oder gibt es irgendwo eine zusammengefasste Changelog-Liste?
http://wiki.freepascal.org/User_Changes ... _this_page" onclick="window.open(this.href);return false;

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Dynamische Arrays und Floats zwischen 2.2.4 und 2.4

Beitrag von carli »

Gibt leider keinen weiteren Aufschluss.
Ich nutze auf alle Fälle ein "array of array of", vielleicht liegt es daran?

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Dynamische Arrays und Floats zwischen 2.2.4 und 2.4

Beitrag von MAC »

dann gib mal nen bisschen beispielcode.
Was für ne Fehlermeldung ? Oder was ist nicht funktionierender Code ? Wenn sich das programm nicht starten lässt?

Code: Alles auswählen

Signatur := nil;

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Dynamische Arrays und Floats zwischen 2.2.4 und 2.4

Beitrag von carli »

Der Record:

Code: Alles auswählen

type TCollisioninfo = record mesh: array of array of TVec3; pos:TVec3; end;
TVec3 = array[0..2] of single;
Aufruf, der zum Crash führt:

Code: Alles auswählen

col2[j]:=NewtonCreateConvexHull(logic.world, length(col.mesh[j]), @(col.mesh[j][0][0]), sizeof(col.mesh[j][0]), 0, 0, @IdentityMatrix);
Deklaration:

Code: Alles auswählen

function  NewtonCreateConvexHull( const newtonWorld : PNewtonWorld; count : int; const vertexCloud : PFloat; strideInBytes : int; tolerance : float; shapeID : int; const offsetMatrix : PFloat) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateConvexHull'{$ELSE}NewtonDLL{$ENDIF __GPC__};
- col ist TCollisioninfo
- i und j sind im richtigen Bereich
- die sonstigen Parameter sind auch richtig
- mit @(col.mesh[j][0][0]) übergebe ich den Zeiger auf das erste Float der Collisioninfo dieser Reihe
- wie gesagt funktioniert es mit allen FPC/OS bis auf der Kombination win32-fpc2.4

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Dynamische Arrays und Floats zwischen 2.2.4 und 2.4

Beitrag von mse »

Stimmt die Record- und Array-Packung?

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Dynamische Arrays und Floats zwischen 2.2.4 und 2.4

Beitrag von Scotty »

Vielleicht liegt es an der Packung? (Alignment of record variables)

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Dynamische Arrays und Floats zwischen 2.2.4 und 2.4

Beitrag von carli »

Die Singles sind ja alle schon 32bit aligned, und packed dürfte sich nicht viel ändern.
Ich kann leider Changes nicht mehr testen, da der, der Windows benutzt hatte, jetzt mit 2.2.4 arbeitet und dort der Fehler nicht mehr auftritt.

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Dynamische Arrays und Floats zwischen 2.2.4 und 2.4

Beitrag von Maik81ftl »

mse hat geschrieben:Stimmt die Record- und Array-Packung?
Hmmm wenn ich mir mal die Reihenfolge anschau

Code: Alles auswählen

type TCollisioninfo = record mesh: array of array of TVec3; pos:TVec3; end;
TVec3 = array[0..2] of single;
Zweifel ich gerade mal daran.

wenn ich das so lese erzeugt carli ein Record, welches auf den Typ TVec3 zugreift. der Type selber wird allerdings erst später erzeugt :?: :!:

nun weiß ich nicht, ob das Jacke wie Hose ist, aber wenn ich einen Typ erstelle, nachdem ich ihn verwende erhalt ich zu 100% eine Fehlermeldung.

ich würde erst mal die Zeilen so ändern.

Code: Alles auswählen

type TVec3 = array[0..2] of single;
TCollisioninfo = record mesh: array of array of TVec3; pos:TVec3; end;
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Dynamische Arrays und Floats zwischen 2.2.4 und 2.4

Beitrag von carli »

Maik81ftl hat geschrieben:
mse hat geschrieben:Stimmt die Record- und Array-Packung?
Hmmm wenn ich mir mal die Reihenfolge anschau

Code: Alles auswählen

type TCollisioninfo = record mesh: array of array of TVec3; pos:TVec3; end;
TVec3 = array[0..2] of single;
Zweifel ich gerade mal daran.

wenn ich das so lese erzeugt carli ein Record, welches auf den Typ TVec3 zugreift. der Type selber wird allerdings erst später erzeugt :?: :!:

nun weiß ich nicht, ob das Jacke wie Hose ist, aber wenn ich einen Typ erstelle, nachdem ich ihn verwende erhalt ich zu 100% eine Fehlermeldung.

ich würde erst mal die Zeilen so ändern.

Code: Alles auswählen

type TVec3 = array[0..2] of single;
TCollisioninfo = record mesh: array of array of TVec3; pos:TVec3; end;
Das mit TVec3 hab ich doch nur zum Verständnis hinten drangeklatscht, weil es in einer komplett anderen Unit deklariert wird.

Und weißt du überhaupt, was es mit der Record- und Array-Packung auf sich hat?

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Dynamische Arrays und Floats zwischen 2.2.4 und 2.4

Beitrag von Maik81ftl »

carli hat geschrieben:Das mit TVec3 hab ich doch nur zum Verständnis hinten drangeklatscht, weil es in einer komplett anderen Unit deklariert wird.

Und weißt du überhaupt, was es mit der Record- und Array-Packung auf sich hat?
weiß nur soviel, wenn es irgendwie Bescheiden deklariert wird, ist die fehlersuche groß.

hab des leider auch schon mal durch, das ich eine Unit an der falschen Ecke eingetragen hab. ergebis nach 5 tagen Fehlersuche :?: Programm is in der Mülltonnte gelandet.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Dynamische Arrays und Floats zwischen 2.2.4 und 2.4

Beitrag von carli »

Maik81ftl hat geschrieben:weiß nur soviel, wenn es irgendwie Bescheiden deklariert wird, ist die fehlersuche groß.

hab des leider auch schon mal durch, das ich eine Unit an der falschen Ecke eingetragen hab. ergebis nach 5 tagen Fehlersuche :?: Programm is in der Mülltonnte gelandet.
Wenn du so was hier anfängst: http://goldenwipf.de/" onclick="window.open(this.href);return false; kannst du dir das nicht mehr leisten.
Mal abgesehen davon, ist es schon sinnvoll, den Vektor in einer zentralen Mathematik-Bibliothek zu definieren und nicht in jeder Unit extra.


Zum Thema: ich glaube, das Problem hat sich inzwischen geklärt. Es war irgendwas, keine Ahnung, ich kanns ja nicht testen.

Antworten