gpt4 book ai didi

c++ - 指向结构的动态指针数组在成员变量赋值时抛出 SIGSEGV

转载 作者:行者123 更新时间:2023-11-28 08:05:45 24 4
gpt4 key购买 nike

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

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

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

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

}

}

最佳答案

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

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

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

关于c++ - 指向结构的动态指针数组在成员变量赋值时抛出 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10326589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com