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

C++ 指向struct的指针的动态数组在成员变量赋值时抛出SIGSEGV,c++,pointers,struct,dynamic-arrays,C++,Pointers,Struct,Dynamic Arrays,我确信这是一个简单的问题,但我正在尝试创建一个实现结构的动态数组的数据结构 每个结构将实现一个链表 所以我想我需要一个指针数组,它将指向每个列表的头部。出于某种原因,分配方法变量会给我一个seg错误。如果你可以的话,我希望你能解释一下我做错了什么。谢谢 哦,还有,所有这些都在一个名为Cache的类中,这就是为什么有些变量似乎没有定义,但我向您保证它们是。程序seg在索引[i]->next=NULL上出错;下面是类似的线 typedef struct setNode { c

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

每个结构将实现一个链表

所以我想我需要一个指针数组,它将指向每个列表的头部。出于某种原因,分配方法变量会给我一个seg错误。如果你可以的话,我希望你能解释一下我做错了什么。谢谢

哦,还有,所有这些都在一个名为Cache的类中,这就是为什么有些变量似乎没有定义,但我向您保证它们是。程序seg在索引[i]->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;
         }

    }

}
typedef结构setNode{
字符有效,脏;
无符号整数标记;
setNode*next;
Cache*nextCache;
}设置;
设置**索引;
arrayLength=缓存大小/块大小;
索引=新的集合节点*[arrayLength];
设置*温度;
//单步遍历数组。数组中充满了指向“虚拟节点”的指针
对于(大小i=0;inext=NULL;
索引[i]->valid=0;
索引[i]->dirty=0;
索引[i]->tag=0;
//为每个标记点创建空链接列表(一个用于直接映射等…)
对于(大小i=0;inext=新设置节点;
温度=温度->下一步;
temp->next=NULL;
临时->有效=0;
温度->脏=0;
温度->标签=0;
}
}
}

索引
是指向
集合
对象的指针数组,但它们未初始化。它们不指向实际的
set
对象,而只是指向随机的内存位置。试图写入随机内存是分段冲突的本质

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

(大小i=0;i{ 索引[i]=新集合; 索引[i]->next=NULL; 索引[i]->valid=0; ...
是的,这很有意义……我在for循环的顶部添加了索引[I]=new set;,现在它可以工作了。谢谢!愚蠢的我,我没有意识到你需要初始化结构和类,但是由于数组只有指针,这很有意义。
for (size_t i = 0; i < arrayLength; i++) {
    indexes[i] = new set;
    indexes[i]->next = NULL;
    indexes[i]->valid = 0;
    ...