Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » intrinsic struct crasht im release = op

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.08.2008, 20:36 Uhr
~Halcom
Gast


Hallo.

Ich habe code der im debug mode zwar läuft, mir im release jedoch crasht. Nach etlichen Versuchen und Recherchen komme ich jedoch nicht weiter. Hier mal ein bisschen code damit es verständlich wird.

Code:

aus: types.h
...
typedef __m128 packet4float

struct packet4vector3
{
  packet4float x;
  packet4float y;
  packet4float z;
  ....
  packet4vector3 & operator = ( const packet4vector3 & a);
  .....
};
...

dazu types.cpp

packet4vector3 & packet4vector3::operator = ( const packet4vector3 & a)
{
  // bis hierhin komme ich
  qDebug("start = op: this = %p, &a = %p", this, &a);

  x = a.x;
  y = a.y;
  z = a.z;

  // bis hierhin nicht
  qDebug("end = op");

  return *this;
}

und noch die classe in der es crasht, einmal stark vereinfacht

class foo
{
  public:
    ...
   void foo()
   {
     packet4vector3 weisMichZu(1.1f, 2.2f, 3.3f); // x = _mm_set_ps1(x) usw.
     test.testPacketVector = weisMichZu;
   }
    ....

  private:

  struct test
  {
    packet4vector3 testPacketVector;
    ....
  };

    ....
}



Rufe ich hier im Debugmode die methode foo auf, so hat der member test.testPacketVector danach die richtigen werte. Im Release mode crasht er mir in der Zuweisungsoperation.

Nun habe ich die Projecteigenschaften schon nach unterschieden zwischen Debug und Release durchsucht, alle Änderungen und versuche dort haben nichts gebracht. Auch das struct ist per compiler auf 16 byte aligned. __m128 ist als Datentyp schon aligned.
Dann habe ich noch die _mm_set_ps und _mm_load_ps ausprobiert ( mit Codeumstelllungen natürlich) hat mir aber auch nix geholfen.

Die Fehlermeldung fehlt auch noch:

start = op: this = 0263F7C8, &a = 002EF8C0

First-chance exception at 0x01065671 in Raytracer.exe: 0xC0000005: Access violation reading location 0x00000000.

Unhandled exception at 0x01065671 in Raytracer.exe: 0xC0000005: Access violation reading location 0x00000000.

Hat vielleicht jemand ein Lösung oder vorschläge woran es liegen könnte?

Viele Dank im voraus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.08.2008, 21:21 Uhr
0xdeadbeef
Gott
(Operator)


Uh...test ist eine Klasse, kein Objekt. Das dürfte in der Form eigentlich gar nicht kompilieren.

Schreib am besten mal einen kleinen Testcase, der das Problem reproduziert.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: