Re[6]: Как искать поехавшую память?
От: B0FEE664  
Дата: 24.09.13 11:19
Оценка:
Здравствуйте, Arturchik, Вы писали:

A>Получилось так:

A>
  • в m_dummy_debug_1 последние 4 байта изменились. Попробовал
    A>
    A>(double&)&ti->m_dummy_debug_1[60]
    A>

    A>И, действительно, получил то, что должно быть в TO, т.е. все съехало на 4 байта.
    A>
  • m_dummy_debug_2 не изменился.

    Я предполагаю следующие причины:
    1) переопределённый operator new
    2) неверно заданное выравнивание в опциях компиляции
    3) нарушение ODR
  • И каждый день — без права на ошибку...
    Re[6]: Как искать поехавшую память?
    От: Кодт Россия  
    Дата: 24.09.13 15:16
    Оценка:
    Здравствуйте, Arturchik, Вы писали:

    <>

    Очень похоже на нарушение ODR.
    По причинам:
    — или что-то перекомпилируется с отставанием на такт
    — или где-то стоит #define double float или какое-нибудь похожее заподло
    — или где-то включена #pragma pack, и она распространилась на твою структуру, — а где-то она не включена и не распространилась
    Перекуём баги на фичи!
    Re[5]: Как искать поехавшую память?
    От: alexku Россия  
    Дата: 25.09.13 02:36
    Оценка:
    Прошу прощения, с первого раза не вкурил, о чём речь.
    Видимо TurbulenceInfo объявлена где-то ещё с другим набором или порядком мемберов. Попробуй своё объявление обернуть в namespace и указывать его явно при использовании. Или назови по-другому.
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.