Я расследую случайный сбой (SIGBUS) и пытаюсь выяснить, что может повредить указатель, который вызывает сбойный метод. Я обнаружил, что этот указатель приводится из своего базового класса с использованием приведения в стиле C в коде C ++. Итак, мне интересно, в каких случаях такое приведение может вызвать сбой, и пытаюсь понять, было ли это основной причиной моей проблемы.
Само кастинг не вызовет крушения (очевидно ..)
Но это возможно, если вы приведете объект потомка, который на самом деле не был таким потомком, что он попытается вызвать функцию из нераспределенного или неправильного места и произойдет сбой.
Например, у нас есть A и B, C, которые наследуют A, если размер B намного больше, чем C .. вы можете разбить его, если бросите то, что было выделено C, в B.
это можно решить с помощью dynamic_cast<SomeType>(ptr);
а затем спрашивает, если результат не nullptr
Других решений пока нет …