Я полагаю, что с вами произошло следующее, или это было что-то похожее с нереализованными зависимостями / заголовками.В любом случае, я надеюсь, что этот ответ может появиться в Google и помочь некоторым позже, чрезвычайно запутанным программистам выяснить, почему они внезапно наблюдают произвольные сбои.
Итак, по опыту, это может произойти, если вы скомпилируете новыйверсия SomeObject.o, но случайно есть другой объектный файл #include
старая версия SomeObject.hpp.Это приводит к повреждению, которое будет вызвано тем, что компилятор ссылается на устаревшие смещения элементов и т. Д. Иногда это в основном работает и приводит к ошибкам сегмента при разрушении объектов - связанных или, казалось бы, удаленных - и в других случаях программные ошибки сразу или где-то еще.между;Я видел несколько перестановок (к сожалению!).
Для всех, кто интересуется , почему это может произойти, может быть, это просто отражение того, как мало я сплю во время программирования, но ясталкивался с этим шаблоном в контексте подмодулей Git, например:
- MyRepo
- / GuiSubmdule
- / HelperSubmodule
- / / GuiSubmodule
Если (A) у вас есть новый коммит в GuiSubmodule, который еще не вставлен в копию HelperSubmodule, (B) ваш makefile
компилирует MyRepoGuiSubmodule / SomeObject.o и (C) другой модуль перевода -либо в подмодуле, либо в главном репо через опасности #include
- ссылки на более старую версию SomeObject.hpp с другим макетом класса ... Вы весело проводите время и много гонитесь за краснымсельди, пока вы, наконец, не поймете простую ошибку.
Так как я собрал весь процесс сборки с нуля, я мог просто не использовать Git / make должным образом - или достаточно строго (забывая проУш / тянуть все подмодули).Я подумываю перейти к символическим ссылкам, по крайней мере, на тот момент, когда мои различные подмодули разрабатываются «в рамках» их основного родительского проекта, так что они вынуждены синхронизироваться!