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