Такое вполне возможно:
Компилятор создал объект A а в B* b записал "мусор".
"Думая" что по адресу *b находится объект класса B он читает и записывает логическое значение куда-то в памяти (так как простые методы getFlag и setFlag скорее всего оптимизируются на простое обращение к атрибуту flag и это объясняет падение при отладке). При вызове сложной функции, собственно, и возникает SegFault.