动态的struct指针数组会在成员变量赋值时抛出SIGSEGV

时间:2012-04-26 02:54:13

标签: c++ pointers struct dynamic-arrays

我非常确定这是一个简单的问题,但我正在尝试创建一个实现动态结构数组的数据结构。

每个结构都将实现一个链表。

所以我认为我想要一个指针数组,它将指向每个列表的头部。由于某种原因,分配方法变量给我一个seg错误。如果可以的话,我会喜欢对我做错的一点解释。谢谢!

哦,而且,所有这些都在一个名为Cache的类中,所以这就是为什么有些变量似乎没有定义,但我向你们保证。程序seg索引上的故障[i] - > gt; next = NULL;和那个下面的类似行。

        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 个答案:

答案 0 :(得分:1)

indexes是指向set个对象的指针数组,但它们未初始化。它们不指向实际的set个对象,而只指向随机的内存位置。尝试写入随机存储器是分段违规的本质。

在使用指针之前,需要分配set个对象并使指针指向它们 - 即,

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