超级基本哈希表设置内存分配错误 是的,我还在学习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;