Сообщение MSVC 2013 BUG, проблемы c выравниванием от 17.02.2016 10:55
Изменено 17.02.2016 10:59 nen777w
Вот такой вот презабавный BUG обнаружился.
Сори что кода много, нет времени делать из этого еще более минимальный пример.
Но суть вот в чём.
Перед началом конструирования членов SampleFunction можно обнаружить что адреса члена ObjectHolder::m_obj равен адресу VTBL e PdfFunction::PdfObject::Object
Это приведёт к тому что когда выполнться конструктор базовый констурктор у dec т.е.
это затрёт адрес VTBL. Что приводило к дальнейшим падениям.

Если же изменить наследование у
на
то это приведёт к AV на этапе инициализации таблицы виртуальных функций у PdfFunction.
Насколько я пока понимаю, здесь явно какая то проблема с неправильным расчётом выравнивания.
Пока буду разбираться дальше, опубликую позже ещё более минимальную верисю примера.
Интересно что думаете?
| "Много кода." | |
| |
Сори что кода много, нет времени делать из этого еще более минимальный пример.
Но суть вот в чём.
Перед началом конструирования членов SampleFunction можно обнаружить что адреса члена ObjectHolder::m_obj равен адресу VTBL e PdfFunction::PdfObject::Object
Это приведёт к тому что когда выполнться конструктор базовый констурктор у dec т.е.
ObjectHolder(Object* p = NULL) : m_obj(p)это затрёт адрес VTBL. Что приводило к дальнейшим падениям.

Если же изменить наследование у
class PdfFunction : public IPdfFunction, public PdfObjectна
class PdfFunction : public PdfObject, public IPdfFunctionто это приведёт к AV на этапе инициализации таблицы виртуальных функций у PdfFunction.
Насколько я пока понимаю, здесь явно какая то проблема с неправильным расчётом выравнивания.
Пока буду разбираться дальше, опубликую позже ещё более минимальную верисю примера.
Интересно что думаете?
Вот такой вот презабавный BUG обнаружился.
Сори что кода много, нет времени делать из этого еще более минимальный пример.
Но суть вот в чём.
Перед началом конструирования членов SampleFunction можно обнаружить что адреса члена ObjectHolder::m_obj равен адресу VTBL e PdfFunction::PdfObject::Object

Это приведёт к тому что когда выполнться конструктор базовый констурктор у dec т.е.
это затрёт адрес VTBL. Что приводило к дальнейшим падениям.

Если же изменить наследование у
на
то это приведёт к AV на этапе инициализации таблицы виртуальных функций у PdfFunction.
Насколько я пока понимаю, здесь явно какая то проблема с неправильным расчётом выравнивания.
Пока буду разбираться дальше, опубликую позже ещё более минимальную верисю примера.
Интересно что думаете?
| "Много кода." | |
| |
Сори что кода много, нет времени делать из этого еще более минимальный пример.
Но суть вот в чём.
Перед началом конструирования членов SampleFunction можно обнаружить что адреса члена ObjectHolder::m_obj равен адресу VTBL e PdfFunction::PdfObject::Object

Это приведёт к тому что когда выполнться конструктор базовый констурктор у dec т.е.
ObjectHolder(Object* p = NULL) : m_obj(p)это затрёт адрес VTBL. Что приводило к дальнейшим падениям.

Если же изменить наследование у
class PdfFunction : public IPdfFunction, public PdfObjectна
class PdfFunction : public PdfObject, public IPdfFunctionто это приведёт к AV на этапе инициализации таблицы виртуальных функций у PdfFunction.
Насколько я пока понимаю, здесь явно какая то проблема с неправильным расчётом выравнивания.
Пока буду разбираться дальше, опубликую позже ещё более минимальную верисю примера.
Интересно что думаете?