ОК, у меня есть этот тест SPLASH2, который я использую для тестирования созданного мною инструмента. Тест имеет следующую структуру.
typedef struct _interact {
struct _interact *next ; /* Next entry of the list */
Element *destination ; /* Partner of the interaction */
float formfactor_out ; /* Form factor from this patch */
float formfactor_err ; /* Error of FF */
float area_ratio ; /* Area(this) / Area(dest) */
float visibility ; /* Visibility (0 - 1.0) */
} Interaction ;
Глядя в код, я обнаружил, что area_ratio никогда не используется. Однако в итоге я вижу, что значение area_ratio не равно 0, как в начале. Поэтому я поместил точку наблюдения в эту переменную и неожиданно gdb указал мне на код, который изменяет visibility (переменная чуть ниже area_ratio ).
Теперь мой вопрос: почему это происходит? Почему area_ratio модифицируется путем модификации visibility . Каковы возможности? Любая подсказка? Я действительно озадачен. Обратите внимание, что я тестирую свою программу на 64-битной машине. Может быть, 64-битный что-то с этим делать, но я не знаю!
Код выглядит примерно так:
/* Create links and finish the job */
inter = get_interaction(process_id) ;
*inter = i12 ;
inter->visibility = VISIBILITY_UNDEF ; // <---- This is what gdb is pointing to