2011-11-08 10 views
1

これは私が作成したツールをテストするために使用している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は決して使用されていることがわかります。しかし、最後には、の値はで、最初は0ではないことがわかります。だから私は、この変数にウォッチポイントを置き、そして驚くべきことにGDBは(ちょうど以下の変数がを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 
+2

あなたは 'Interaction'へのポインタを取って、何らかの形でそれから' sizeof(float) 'バイトを引いたものと考えられます。それは私が "ポインタトリッキー"と呼ぶものを必要とするでしょう。減算のために 'char *'にキャストします。だから、もし 'インタラクション'ポインタのようなトリッキーなことがあれば、それを注意深くチェックしてください。 –

答えて

関連する問題