C++ 为什么会出现运行时浮点错误?

C++ 为什么会出现运行时浮点错误?,c++,hashmap,modulus,sigfpe,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);

我正在为学校做一个引入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

我不太明白为什么这会产生浮点错误,因为我的工作完全是整数。对于键banana和值3,散列int为2068534322。如果该->大小为5,则模数应计算为2

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


编辑1:我还尝试用硬编码的5替换这个->大小,这是这个->大小应该计算的值,所以这个->大小用0计算没有问题。

你做一个模==除法运算,所以你需要确保分母不是零

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));
}

您需要执行模==除法运算,因此需要确保分母不是零

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));
}

如果需要更多信息提供帮助,请随时给我留言。我不想提供太多信息,以至于让人不知所措。K是什么类型的?你确定大小不是零吗?什么是浮点错误?请详细描述您遇到的错误。您可以断言此->大小;执行此操作时不是0!这对您来说非常容易调试。不要束手无策。如果行int bucket=intKey%this->size;如果导致运行时错误,请使用调试工具确定传递给%运算符的值。这真是再容易不过了。一旦您知道这些值,请制作一个简单的SSCCE来说明问题。如果需要更多信息来帮助,请随时给我留言。我不想提供太多信息,以至于让人不知所措。K是什么类型的?你确定大小不是零吗?什么是浮点错误?请详细描述您遇到的错误。您可以断言此->大小;执行此操作时不是0!这对您来说非常容易调试。不要束手无策。如果行int bucket=intKey%this->size;如果导致运行时错误,请使用调试工具确定传递给%运算符的值。这真是再容易不过了。一旦知道了这些值,就制作一个简单的SSCCE来说明问题。如果size是底层数组的大小并且等于0,那就意味着没有可以放入内容的映射。这不像用不同的值替换bucket那么简单。如果size是底层数组的大小并且等于0,这意味着没有可以放入内容的映射。这可不像用一个不同的值来代替bucket那么简单。