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

标签 c++ pointers struct dynamic-arrays

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

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

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

哦,还有,所有这些都在一个名为 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/

相关文章:

c - 从另一个头文件获取静态结构成员的地址

c++ - 如何定义 int[][26] 类型的变量?

c++ - 奇怪的 char* 编译错误?

c++ - Swift 中的神经网络

c - 进程在 C 中返回 -1073741819 (0xC0000005)

c++ - 指向 vector 的指针 vs 指针 vector vs 指向指针 vector 的指针

c++ - 无法访问类内的结构成员

json - 如何从另一个平面/简单的配置单元表中使用 map[structs] 加载配置单元表

c++ - CMakeLists - add_definition 在变量周围添加双引号

C++:重载 "pointer to object"* 运算符