超级基本哈希表设置内存分配错误 是的,我还在学习C++,我正在尝试创建自己的哈希.h头,它有几个哈希函数(非神秘的),比如Murhhash和Cyyhash。首先,我想要一个非常基本的实现。但它不是编译,因为我有一些内存错误。这是由于添加了一个条目,其中数据
超级基本哈希表设置内存分配错误超级基本哈希表设置内存分配错误 是的,我还在学习C++,我正在尝试创建自己的哈希.h头,它有几个哈希函数(非神秘的),比如Murhhash和Cyyhash。首先,我想要一个非常基本的实现。但它不是编译,因为我有一些内存错误。这是由于添加了一个条目,其中数据,c++,hash,hashtable,C++,Hash,Hashtable,超级基本哈希表设置内存分配错误 是的,我还在学习C++,我正在尝试创建自己的哈希.h头,它有几个哈希函数(非神秘的),比如Murhhash和Cyyhash。首先,我想要一个非常基本的实现。但它不是编译,因为我有一些内存错误。这是由于添加了一个条目,其中数据被传递给类函数。更改为指针/引用会产生类似的错误,我似乎无法修复它。有人能看出哪里出了问题,这样我就知道将来该找什么了吗?谢谢 //Hash.h template<class T> class HashEntry{ priv
是的,我还在学习C++,我正在尝试创建自己的哈希.h头,它有几个哈希函数(非神秘的),比如Murhhash和Cyyhash。首先,我想要一个非常基本的实现。但它不是编译,因为我有一些内存错误。这是由于添加了一个条目,其中数据被传递给类函数。更改为指针/引用会产生类似的错误,我似乎无法修复它。有人能看出哪里出了问题,这样我就知道将来该找什么了吗?谢谢
//Hash.h
template<class T>
class HashEntry{
private:
int key;
T data;
public:
HashEntry() {};
void putData(T input, int keyVal){
//SEGMENTATION FAULT HAPPENS HERE!!
key = keyVal;
data = input;
}
T getData(){
return data;
}
};
template<class T>
class Hash{
private:
int myFunc;
size_t sizeHash;
HashEntry<T> **table;
public:
Hash(int func, size_t size): myFunc(func), sizeHash(size-1) {
table = new HashEntry<T>*[sizeHash];
for (int i=0;i<sizeHash;i++) table[i] = NULL;
}
int hashFunc(int key){
try{
if (myFunc == 0){
return key % sizeHash;
} else if (myFunc == 1){
//other has func's
} else {string excep = "No such hash function!"; throw excep;}
} catch(string e) {cout << "Hash::hashFunc(): Exception Raised: " << e << endl; exit(0);}
return -1;
}
void addEntry(T data, int key){
int myHash = hashFunc(key);
table[myHash]->putData(data, key);
}
};
//Hash.h
模板
类哈希条目{
私人:
int键;
T数据;
公众:
HashEntry(){};
无效putData(T输入,int keyVal){
//分割错误发生在这里!!
key=keyVal;
数据=输入;
}
T getData(){
返回数据;
}
};
模板
类散列{
私人:
int-myFunc;
尺寸和尺寸灰分;
HashEntry**表;
公众:
散列(int func,size\u t size):myFunc(func),sizeHash(size-1){
table=新HashEntry*[sizeHash];
对于(int i=0;i您得到了什么错误?这是您粘贴在此处试图编译的完整代码吗?此外,您在编译代码或内存分配方面是否有问题?您的问题和标题似乎相互矛盾。我看到了您的代码集表[i]
到NULL
,我看到它通过表[myHash]调用成员函数
指针。但我看不到您将非NULL
值分配给存储在表
数组中的指针。您在何处以及如何创建HashEntry
的实例?您似乎已经用空指针填充了rable,并且在添加对象时,您尝试对空指针进行操作,而不是创建新的哈希输入
。愚蠢的错误!谢谢。非常有用。
Hash<char> *myHash = new Hash<char>(0,10);
myHash->addEntry('s', 11);
return 0;