2011-07-28 10 views
5

Załóżmy, że mam klasę i nie ma widocznych problemów z nią lub jej członkami, jednak jeśli spróbuję przekazać adresy kilku członków klasy do innej klasy w tym samym module , pierwszy argument jest poprawnie przekazywany, ale drugi jest zawsze NULL! Jak to może być? Czy może istnieć jakieś ukryte uszkodzenie stosu lub sterty lub jakiś problem wyrównania? Nie ma żadnych problemów MSVC, choć ...Apple GCC 4.2.1 przekazuje wskaźnik do konstruktora

class myType2 
{ 
    char c1; 
    char c2; 
} __attribute__ ((aligned (1))); // Yes, align differs and I can't change it 

class MyClass2 
{ 
public: 
    MyClass2(myType1* type1, myType2* type2, int data) 
    { 
     // type1 and data are ok, but type2 is NULL... 
    } 
} __attribute__ ((aligned (16))); 

class MyClass 
{ 
public: 
    myType1 type1; 
    myType2 type2; 
    //.... 
    void test() 
    { 
     MyClass2 test1(&this->type1, &this->type2, 170); 
     MyClass2* pTest2 = new MyClass2(&this->type1, &this->type2, 170); // Same result 

     myType2 localType2; 
     MyClass2 test3(&this->type1, &localType2, 170); // Same result!!! 
    } 
} __attribute__ ((aligned (16))); 
+2

Działa dla mnie w ppc mac z gcc 4.0. Czy możesz pokazać pełny przykład demonstrujący problem? –

+1

Tak, uproszczony przykład działa dobrze, jak zawsze. Nie ma sposobu, bym mógł pokazać ci kompletny przykład, ponieważ jego setki tysięcy linii kodu ... – Ryan

+0

Próbowałem wielu odmian, ale wydaje się, że bez względu na to, jakie dane przechodzę, tylko pierwszy argument jest trafił poprawnie ... Coś zdecydowanie jest nie tak ze stosem :( – Ryan

Odpowiedz

0

Blasted GCC ...: doubleFacePalm I nie był w stanie rozwiązać ten problem normalnie, ale znalazłem obejście przekazując wszystkie dane konstruktora klasy w struktura wyrównana do granicy 16 bajtów.

Powiązane problemy