当超过一定大小时,为什么我的哈希表会出现核心转储错误?

时间:2016-11-20 18:10:10

标签: hashtable coredump

我实现了algorithm,它将所有正整数解决方案打印到等式a^3 + b^3 = c^3 + d^3,其中 a,b,c,d是1到1000之间的整数。 为此,我使用hash tablecomplexity放到O(N2)H = c^3 + d^3

以下是我使用(整数对列表)hash table

int n = 10;
int m = pow(n,3)+pow(n,3);
list< pair<int,int> > hashTable[m+1]; //(*) Core Dump here if n>50. Why?

n&lt; = 50 时,我的代码可以正常工作。但我无法为 n&gt; 50 运行我的algorithm。所以,我无法解决 n = 1000 的问题。我在行(*)中获得了核心转储。你能解释一下为什么会发生这种情况,并帮助我以更好的方式实施我的hash table吗?

感谢您的时间!

1 个答案:

答案 0 :(得分:0)

问题是你试图在堆栈上分配hashTable数组,它有大小限制(默认为几兆字节)。当n = 50且sizeof(std::list<std::pair<int, int> >) = 16时,所需的内存大小仅为2MB。比这更大 - 你的堆栈大小已经用完了。

要修复它,请动态分配hashTable数组或使用std::unordered_set而不是实现自己的哈希表。