2011-07-28 9 views
5

Digamos que tengo una clase y no hay problemas visibles con ella o sus miembros, sin embargo, si intento pasar las direcciones de varios miembros de la clase a otra clase en el mismo módulo , el primer argumento se pasa correctamente, pero el segundo siempre es NULL! ¿Cómo puede ser esto? ¿Podría haber algún tipo de corrupción oculto de pila/montón o algún tipo de problema de alineación? No hay problemas en MSVC, aunque ...Apple GCC 4.2.1 pasando un puntero al constructor

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

Funciona para mí en un Mac ppc con gcc 4.0. ¿Puedes mostrar un ejemplo completo que demuestre el problema? –

+1

Sí, el ejemplo simplificado funciona bien, como siempre. No hay forma de que pueda mostrarte un ejemplo completo, ya que sus cientos de miles de líneas de código ... – Ryan

+0

He intentado muchas variaciones, pero parece que no importa qué tipo de datos pase, solo el primer argumento es pasado correctamente ... Algo definitivamente está mal con la pila :( – Ryan

Respuesta

0

Blasted GCC ...: doubleFacePalm yo no era capaz de resolver este problema normalmente, pero he encontrado una solución al pasar todos los datos en el constructor de la clase una estructura alineada por un límite de 16 bytes.

Cuestiones relacionadas