C ++,无法为动态分配的数组分配新值

时间:2015-11-26 03:27:37

标签: c++ arrays hash hashmap

我正在尝试编写一个map的哈希表实现,当我尝试运行它时,我遇到了一些崩溃程序的错误 - 特别是当我尝试将新值放入地图时。这是put函数:

template<class KEY,class T, int (*thash)(const KEY& a)>
T HashMap<KEY,T,thash>::put(const KEY& key, const T& value) {
    int hash_index = hash_compress(key);
    LN* key_ln = find_key(hash_index,key);
    if (key_ln != nullptr){
        T to_return = (key_ln->value).second;
        (key_ln->value).second = value;
        return to_return;
    }

    this->ensure_load_threshold(used+1);
    hash_index = hash_compress(key);
    //map[hash_index] = new LN(Entry(key,value),map[hash_index]);
    ++mod_count;
    ++used;
    return value;
}

问题行是注释掉的。当这一行不存在时,测试程序能够正常运行(显然,它不会添加任何东西)。它应该做的是为链接列表中的新链接节点分配空间,下一个节点是当前链接节点,其映射在hash_index指向,并且链接节点的值是Entry类型对象,它只是一对关键和价值观。

它没有那样做。它崩溃了程序。但是,当我告诉它将值更改为当前不是的值时,它才会执行此操作。当我说:

map[hash_index] = new LN();

效果很好;这就是每个索引的初始化方式,所以这并没有太大的改变。 LN()构造函数中的所有字段似乎都没有问题,因为它可以工作:

LN* new_ln = new LN(Entry(key,value),map[hash_index]);
std::cout << new_ln->value.first;

问题也不在于派生要更改的索引的hash_compress函数,因为这也不起作用:

map [0] = new LN(Entry(键,值),map [0]);

它肯定有一个0的索引。唯一不起作用的是为数组索引赋值。

任何帮助都将不胜感激。

0 个答案:

没有答案