Apple GCC 4.2.1 передает указатель на конструктор - PullRequest
5 голосов
/ 28 июля 2011

Допустим, у меня есть класс, и нет видимых проблем с ним или его членами, однако, если я пытаюсь передать адреса нескольких членов класса другому классу в том же модуле, первый аргумент передается правильно, но второй всегда NULL ! Как это может быть? Может ли быть какое-то скрытое повреждение стека / кучи или какая-то проблема с выравниванием? В MSVC проблем нет, хотя ...

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)));

1 Ответ

0 голосов
/ 29 июля 2011

Взорванный GCC ...: doubleFacePalm Я не смог нормально решить эту проблему, но я нашел обходной путь, передав все данные конструктора класса в структуре, выровненной по границе 16 байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...