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. |