我非常确定这是一个简单的问题,但我正在尝试创建一个实现动态结构数组的数据结构。
每个结构都将实现一个链表。
所以我认为我想要一个指针数组,它将指向每个列表的头部。由于某种原因,分配方法变量给我一个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;
}
}
}
答案 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;
...