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)));
Funciona para mí en un Mac ppc con gcc 4.0. ¿Puedes mostrar un ejemplo completo que demuestre el problema? –
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
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