C/C++

Неверный адрес поля структуры

Впервые столкнулся с очень странной ошибкой: при попытке чтения значения поля структуры, считывается значение из памяти соседней по отношению к нужному полю. Код примерно такой (сильно упрощенный вариант, потому что код не могу цитировать):
Код
А выравнивание структур какое, если оно есть?
Упаковку полей структуры используешь?
Цитата(European @ 26:04:2007, 14:23 )
Цитата(Serjio @ 26:04:2007, 13:36 )
Цитата(European @ 26:04:2007, 14:44 )
А что возвращает int *p = S2->m_S1.pi ДО вызова функции?
Добавлю еще вот что, когда в дебаге останавливаешься после выполнения строчки из ф-ции func, то значение переменной pi равно правильному адресу, а вот значение переменной p этому правильному ажресу не равно, т.е. сразу после выполнения присваивания значения переменных - разные ! я вообще не понимаю как такое возможно...
Цитата(European @ 26:04:2007, 15:05 )
Поток в программе один?
Я бы поставил точку останова на изменение памяти по адресу p.
И изучил асм код сгенеренный.
А в релизе есть такая проблема?
Да, #pragma pack нигде не используется?
И что если вставить сравнение после присваивания?
Код
Цитата(grigsoft @ 27:04:2007, 11:24 )
Для: Serjio
У меня похожие проблемы были с проектами под Pocket PC в VS 2005 (отладчик показывает одно значение, а на самом деле оно другок), я их так и не решил. Обходился отладочными макросами. Чем тебе помочь, у меня даже и идей нет
Решил проблему! Дело было вот в чем: структура данных была такая:
Код
Оптимизация отключена в дебаге? Вообще проблема только в том что отладчик неверно показывает, или реально в проекте неправильно работает? В первом случае я бы забил - бывает такое. Во втором - непонятно. Особенно при отсутствии оптимизации. Я раз встречался в релизе с подобной проблемой, которая решилась только отключением оптимизации для конкретной функции через прагму. Т.е. в чистом виде ошибка компилятора. Но чтобы в дебаге? Я больше склонен грешить на различное выравнивание в модулях. Попробуй в разных функциях (где работает это, и где нет) вызвать sizeof(S1) и S2. Будут одинаковые результаты?
хе-хе.
Цитата(Serjio @ 26:04:2007, 13:15 )
Цитата(European @ 27:04:2007, 16:23 )