Dynamische Arrays und Floats zwischen 2.2.4 und 2.4
-
- 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
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?)
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?)
Re: Dynamische Arrays und Floats zwischen 2.2.4 und 2.4
http://wiki.freepascal.org/User_Changes ... _this_page" onclick="window.open(this.href);return false;carli hat geschrieben:Oder gibt es irgendwo eine zusammengefasste Changelog-Liste?
-
- 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
Gibt leider keinen weiteren Aufschluss.
Ich nutze auf alle Fälle ein "array of array of", vielleicht liegt es daran?
Ich nutze auf alle Fälle ein "array of array of", vielleicht liegt es daran?
-
- 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
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?
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;
-
- 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
Der Record:
Aufruf, der zum Crash führt:
Deklaration:
- 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
Code: Alles auswählen
type TCollisioninfo = record mesh: array of array of TVec3; pos:TVec3; end;
TVec3 = array[0..2] of single;
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);
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__};
- 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
-
- 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
Stimmt die Record- und Array-Packung?
-
- 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
Vielleicht liegt es an der Packung? (Alignment of record variables)
-
- 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
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.
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.
-
- 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
Hmmm wenn ich mir mal die Reihenfolge anschaumse hat geschrieben:Stimmt die Record- und Array-Packung?
Code: Alles auswählen
type TCollisioninfo = record mesh: array of array of TVec3; pos:TVec3; end;
TVec3 = array[0..2] of single;
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
und der Kreis Segeberg meine LIEBE 


-
- 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
Das mit TVec3 hab ich doch nur zum Verständnis hinten drangeklatscht, weil es in einer komplett anderen Unit deklariert wird.Maik81ftl hat geschrieben:Hmmm wenn ich mir mal die Reihenfolge anschaumse hat geschrieben:Stimmt die Record- und Array-Packung?Zweifel ich gerade mal daran.Code: Alles auswählen
type TCollisioninfo = record mesh: array of array of TVec3; pos:TVec3; end; TVec3 = array[0..2] of single;
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;
Und weißt du überhaupt, was es mit der Record- und Array-Packung auf sich hat?
-
- 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
weiß nur soviel, wenn es irgendwie Bescheiden deklariert wird, ist die fehlersuche groß.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?
hab des leider auch schon mal durch, das ich eine Unit an der falschen Ecke eingetragen hab. ergebis nach 5 tagen Fehlersuche

Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 


-
- 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
Wenn du so was hier anfängst: http://goldenwipf.de/" onclick="window.open(this.href);return false; kannst du dir das nicht mehr leisten.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 FehlersucheProgramm is in der Mülltonnte gelandet.
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.