好的,我從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,因爲它是在開始階段。所以我在這個變量上放置了一個觀察點,並且令人驚訝地,我指出了一個代碼,它修改了可見性(剛好在area_ratio之下的變量)。
現在我的問題是爲什麼會發生這種情況。 area_ratio如何通過修改知名度進行修改。可能性有哪些?任何線索?我真的很困惑。請注意,我正在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
可以想象,你已經使用了一個指向'Interaction'的指針,並以某種方式從中減去了'sizeof(float)'字節。這就需要我稱之爲「指針欺騙」 - 例如轉換爲char *'進行減法運算。因此,如果有'交互'指針有任何這樣的詭計,請仔細檢查。 –