2012-04-26 7 views
0

これは簡単な問題ですが、構造体の動的配列を実装するデータ構造体を作成しようとしています。構造体へのポインタの動的配列は、メンバー変数の代入でSIGSEGVをスローします

各構造体はリンクリストを実装します。

私は各リストの先頭を指すポインタの配列が必要だと思います。何らかの理由でメソッド変数を代入すると、segaultが発生します。あなたができれば、私が間違っていることについて少し説明するのが大好きです。ありがとう!

ああ、これはすべてCacheというクラスの中にあります。そのため、定義されていない変数がいくつかありますが、私はそれらを保証しています。インデックス[i] - > next = NULL上のプログラムseg faults。その下に同様の行があります。

 typedef struct setNode { 
    char valid, dirty; 
    unsigned int tag; 
    setNode *next; 
    Cache *nextCache; 

} set; 
    set **indexes; 

    arrayLength = cache_size/block_size; 

    indexes = new setNode *[arrayLength]; 

    set *temp; 

    //Step through the array. The array is full of pointers to "Dummy Nodes" 
    for (size_t i = 0; i < arrayLength; i++) { 
     indexes[i]->next = NULL; 
     indexes[i]->valid = 0; 
     indexes[i]->dirty = 0; 
     indexes[i]->tag = 0; 
     //create empty linked list for each tag spot (One for direct mapped. etc...) 

     for(size_t i = 0; i < associativity; i++) 
     { 
     temp = indexes[i]; 
     temp->next = new setNode; 
     temp = temp->next; 
     temp->next = NULL; 
     temp->valid = 0; 
     temp->dirty = 0; 
     temp->tag = 0; 
     } 

    } 

} 

答えて

1

indexessetオブジェクトへのポインタの配列であるが、彼らは初期化されていないです。それらは実際のsetオブジェクトを指しているのではなく、単にランダムなメモリ位置を指しています。ランダムなメモリに書き込むことは、セグメンテーション違反の本質です。

あなたのポインタを使用する前に、あなたがsetオブジェクトを割り当てるとポインタがそれらを指すようにする必要があり - すなわち、

for (size_t i = 0; i < arrayLength; i++) { 
    indexes[i] = new set; 
    indexes[i]->next = NULL; 
    indexes[i]->valid = 0; 
    ... 
+0

理にかなって右、... I [i]は=新しいセットのインデックスを追加しました。 forループの最上部にあり、今は動作します。ありがとう!愚かな私は、あなたは構造体とクラスを初期化する必要があるとは思っていませんでしたが、配列にはポインタしかないので意味があります。 – usssrrrrrr1

関連する問題