Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我在尝试推回C+中的项目时会出现seg错误+;?_C++_Hashmap_Hashtable_Hashcode - Fatal编程技术网

C++ 为什么我在尝试推回C+中的项目时会出现seg错误+;?

C++ 为什么我在尝试推回C+中的项目时会出现seg错误+;?,c++,hashmap,hashtable,hashcode,C++,Hashmap,Hashtable,Hashcode,我正在为我的数据结构类开发一个哈希表实验室。当我在insert函数中使用push_back()函数时,我一直会遇到一个set错误。然而,我不确定是什么导致了这个错误 using namespace std; HashTable::HashTable(int buckets) { this->buckets = buckets; vector<Entry>* table = new vector<Entry>[buck

我正在为我的数据结构类开发一个哈希表实验室。当我在insert函数中使用push_back()函数时,我一直会遇到一个set错误。然而,我不确定是什么导致了这个错误

    using namespace std;

    HashTable::HashTable(int buckets) {
        this->buckets = buckets;
        vector<Entry>* table = new vector<Entry>[buckets];
    }


    Entry HashTable::insert(GameBoard board, int number) {
        int index = compress(board.hashCode());
        Entry entry = Entry(board, number);
        table[index].push_back(entry);
        return entry;
    }


    int HashTable::compress(int hashCode) {
        return (hashCode % buckets);
    }


    Entry::Entry(GameBoard board, int value) { 
        this->board = board; 
        this->value = value; 
    }


    int GameBoard::hashCode() {

        int hashVal = 0;

        for (int r = 0; r < DIMENSION; r++) {
            for (int c = 0; c < DIMENSION; c++) {
                hashVal = ((127 * hashVal) + board[r][c]) % 16908799;
            }
        }

        return hashVal;
    }
使用名称空间std;
哈希表::哈希表(int bucket){
这个->桶=桶;
向量*表=新向量[桶];
}
条目哈希表::插入(游戏板,整数){
int index=compress(board.hashCode());
条目=条目(板、编号);
表[索引]。推回(条目);
返回条目;
}
int HashTable::compress(int hashCode){
返回(哈希代码%bucket);
}
条目::条目(游戏板,int值){
这个->板=板;
这个->值=值;
}
int GameBoard::hashCode(){
int hashVal=0;
对于(int r=0;r
在问题中显示的代码中:

HashTable::HashTable(int buckets) {
    this->buckets = buckets;
    vector<Entry>* table = new vector<Entry>[buckets];
}
HashTable::HashTable(int bucket){
这个->桶=桶;
向量*表=新向量[桶];
}

创建一个局部变量
,它是指向
向量的指针
,然后泄漏内存。然后在
HashTable::insert
中尝试访问未初始化的成员变量
table

在问题中显示的代码中:

HashTable::HashTable(int buckets) {
    this->buckets = buckets;
    vector<Entry>* table = new vector<Entry>[buckets];
}
    HashTable::HashTable(int buckets) {
        this->buckets = buckets;
        vector<Entry>* table = new vector<Entry>[buckets]; // this table is local to this function, also a memory leek.
    }
HashTable::HashTable(int bucket){
这个->桶=桶;
向量*表=新向量[桶];
}
创建一个局部变量
,它是指向
向量的指针
,然后泄漏内存。然后在
HashTable::insert
中尝试访问未初始化的成员变量
table

    HashTable::HashTable(int buckets) {
        this->buckets = buckets;
        vector<Entry>* table = new vector<Entry>[buckets]; // this table is local to this function, also a memory leek.
    }
我可以看到您将在
insert
方法中
push_back()。赛格。发生故障的原因是您要将
推回到非斜体
表格

您的
哈希表
类中是否有
向量*表
。如果您已经更改了
HashTable::HashTable(int bucket)
以初始化该表,如下所示

        HashTable::HashTable(int buckets) {
            this->buckets = buckets;
            table = new vector<Entry>[buckets]; // Init class attribute `vector<Entry>* table`
        }
HashTable::HashTable(int bucket){
这个->桶=桶;
table=newvector[bucket];//Init class属性`vector*table`
}
如果在
HashTable
类中没有任何
vector*table
,请将其添加到类中并使用上面的
HashTable::HashTable(int bucket)

这将解决您的问题

我可以看到您将在
insert
方法中
push_back()。赛格。发生故障的原因是您要将
推回到非斜体
表格

您的
哈希表
类中是否有
向量*表
。如果您已经更改了
HashTable::HashTable(int bucket)
以初始化该表,如下所示

        HashTable::HashTable(int buckets) {
            this->buckets = buckets;
            table = new vector<Entry>[buckets]; // Init class attribute `vector<Entry>* table`
        }
HashTable::HashTable(int bucket){
这个->桶=桶;
table=newvector[bucket];//Init class属性`vector*table`
}
如果在
HashTable
类中没有任何
vector*table
,请将其添加到类中并使用上面的
HashTable::HashTable(int bucket)


这将解决您的问题。

是回拨电话还是[]接线员?我对
vector*table=newvector[bucket]的合法性有点模糊,但segfaults通常来自错误的数组索引。
hashCode%bucket
不会产生统一的分布,除非
bucket
除以可能的哈希数。记住这一点。是时候加载调试器了。(我们不能从这里为您这样做)是回拨电话还是[]接线员?我对
vector*table=newvector[bucket]的合法性有点模糊,但segfaults通常来自错误的数组索引。
hashCode%bucket
不会产生统一的分布,除非
bucket
除以可能的哈希数。记住这一点。是时候加载调试器了。(我们不能在这里为您这样做)谢谢您指出这一点。内存泄漏的确切位置以及如何修复它?很好的捕捉,可能OP隐藏了一个成员
(似乎他稍后在其他成员函数中使用它)@b如果您已经声明了
table
作为类的成员,则只需使用
table=new vector[bucket]
,然后不要忘记在析构函数中
delete[]table
。@b内存泄漏正是在复制到我的答案的代码中。再次阅读我的答案,但我可以在这里重复:在那里创建一个名为
table
的局部变量。@vsoftco解决了这个问题。我在标题中声明了表,这就是导致错误的原因。谢谢谢谢你指出这一点。内存泄漏的确切位置以及如何修复它?很好的捕捉,可能OP隐藏了一个成员
(似乎他稍后在其他成员函数中使用它)@b如果您已经声明了
table
作为类的成员,则只需使用
table=new vector[bucket]
,然后不要忘记在析构函数中
delete[]table
。@b内存泄漏正是在复制到我的答案的代码中。再次阅读我的答案,但我可以在这里重复:在那里创建一个名为
table
的局部变量。@vsoftco解决了这个问题。我在标题中声明了表,这就是导致错误的原因。谢谢