2011-07-28 79 views
5

假設我有一個類,並且它或它的成員沒有可見問題,但是如果我嘗試將幾個類成員的地址傳遞給同一模塊中的另一個類,第一個參數正確傳遞,但第二個參數始終是NULL!怎麼會這樣?是否會有某種隱藏的堆棧/堆損壞或某種對齊問題?有在沒有問題MSVC,但...Apple GCC 4.2.1將指針傳遞給構造函數

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

適用於使用gcc 4.0的ppc mac。你能否展示一個證明問題的完整例子? –

+1

是的,這個簡單的例子一如既往地正常工作。我無法告訴你一個完整的例子,因爲它有數十萬行代碼... – Ryan

+0

我已經嘗試了很多變體,但似乎無論我傳遞什麼樣的數據,只有第一個參數是通過正確...有一些肯定是錯誤的堆棧:( – Ryan

回答

0

詛咒GCC ...:doubleFacePalm我是不是能夠正常解決這個問題,但我發現了一個解決方法通過了所有類的構造數據一個由16字節邊界對齊的結構。