为什么这会产生运行时浮点错误?

时间:2014-06-02 20:07:17

标签: c++ hashmap modulus sigfpe

我正在为学校做一个引入了hashmaps的作业,所以我正在为使用std::hash函数的hashmap创建一个模板化的类。我遇到的问题出现在insert函数中,如下所示:

template <class K, class V>
void HashMap<K, V>::insert(K key, V value)
{
    std::hash<std::string> stringHash;
    int intKey = stringHash(key);
    int bucket = intKey % this->size();
    map[bucket].push_back(std::pair<K, V>(key, value));
}

我的错误发生在以下行:int bucket = intKey % this->size();

我不太明白为什么这会产生浮点错误,因为我完全用整数做我的工作。用钥匙&#34;香蕉&#34;值3,散列int为2068534322.在this->size为5的情况下,模数应计算为2.

那么,为什么我得到一个浮点错误?

编辑1:我还尝试将this->size()替换为硬编码的5(this->size应评估的内容),因此this->size没有问题用0评估。

1 个答案:

答案 0 :(得分:4)

你做模数(==除法)操作,所以你需要确保你的分母不为零

template <class K, class V>
void HashMap<K, V>::insert(K key, V value)
{
    std::hash<std::string> stringHash;
    int intKey = stringHash(key);
    int bucket = this->size() ? intKey % this->size() : intKey; 
       // or whatever makes sense to assign for the latter condition
    map[bucket].push_back(std::pair<K, V>(key, value));
}

或者至少在执行此操作时发出assert语句来跟踪错误来电的来源:

std::assert(this->size());
int bucket = intKey % this->size();