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

К>Здравствуйте, B0FEE664, Вы писали:


К>Дебажные блоки нужно добавить и спереди, и сзади

К>
К>class TurbulenceInfo
К>{
К>public:
К>    TurbulenceInfo(void);
К>    virtual ~TurbulenceInfo(void);

К>    char m_dummy_debug_1[64];
К>    double TO;    // turbulence onset
К>    double TS;    // turbulence slope
К>    double TJ;    // turbulence jump
К>    int TT;        // turbulence timing
К>    int index;
К>    int TSIndex;
К>    bool appropriate;
К>    CTime time;
К>    char m_dummy_debug_2[64];
К>};

К>/////////

К>TurbulenceInfo::TurbulenceInfo(void)
К>{
К>    // заполняем дебажные блоки калиброванным мусором
К>    memset(m_dummy_debug_1, 0xCD, sizeof(m_dummy_debug_1));
К>    memset(m_dummy_debug_2, 0xB5, sizeof(m_dummy_debug_2));
К>    // и далее - обычная инициализация всего
К>    .....
К>}
К>


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

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

    Добавил void* dummy; в начало класса. Выполняю присваивание ti->time = (CTime)123456; Получилось так:
  • m_dummy_debug_1 не изменился.
  • m_dummy_debug_2 первые 8 байт обнулилиись.
  • ti->time = ерунда
  • (__time64_t&)&ti->m_dummy_debug_2[-11] = то, что я записывал в ti->time
  •  
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.