Добрый день. Возникла ситуация, в причинах появления которой хочется разобраться.
Есть программа на C++, в ней есть классы A и B
class A {
public:
A() {}
B* getB() {return b;}
private:
B* b;
};
class B {
public:
B() {};
bool getFlag() {return flag;}
void setFlag (bool f) {flag = f;}
void serialize() {...}//запись в файл
private:
bool flag;
};
Как можно увидеть, в конструкторе класса A отсутствует вызов b = new B(); то есть память не выделяется.
Однако в программе удаётся по полученному от класса A указателю на b (т.к. он не инициализировался даже 0 понятно, что он куда-то ведёт) вызывать getFlag() и setFlag() и получать от них значения. Более того, при вызове b->serialize() выдайтся отладочная печать находящаяся в этой функции до момента обращения к flag, на котором программа наконец падает с segfault'ом. Причём это не единичный случай, объектов класса A создаётся несколько десятков и только изредка, не в каждом запуске при обращении к A::b какого-нибудь из них программа падает.
При этом если программу отлаживать в gdb, то всё как и положено падает с segfault'ом при первой же попытке что-то сделать с A::b.
Подскажите, чем может быть вызвано такое странное поведение программы? (Выделение памяти я естественно уже добавил, но теоретический интерес остался)