Нарушение доступа при вызове некоторых конструкторов MFC по умолчанию - PullRequest
0 голосов
/ 28 июля 2011

Я пытаюсь задать этот вопрос еще раз из-за того, что вчера не смог четко сформулировать вопрос.По сути, у меня есть ошибка нарушения доступа, описанная в комментарии в коде ниже ... есть идеи, почему?

Class A 
{
private:
    BOOL a;
    BOOL b;
    int i;
public:
    A() {a = FALSE; b = FALSE; i = 0;}
....
}


Class B : public A 
{
public:
    B() {} // empty constructor
....
}

Class C
{
public:
    C() {} // <-- when the constructor is calling the CButton and CCombobox 
           // default constructor for the member "cb" and "button", it overrides 
           // the address space of some of the variables defined in class A 
           // (e.g. a, and b would be changed to some garbage)
           // Basically, any variable defined below 'y' will have similar 
           // problems, though not exactly the same variables from 'y' will 
           // be changed..
private:
    int x;
    B y;
    CCombobox cb;
    CButton button;
}

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Я нашел решение своей проблемы.Причина проблемы заключается в том, что класс A построен на dll с другим выравниванием структуры, чем класс B и C.

1 голос
/ 28 июля 2011
  • Проверьте стек вызовов правильно.
  • Убедитесь, что объект размещен правильно, попробуйте разместить его в стеке (а не только по ярлыку).
  • Проверьте, нет ли у других классов #pragma конфликтов упаковки.
  • Попробуйте удалить некоторые члены-данные из класса C.
...