【发布时间】:2012-05-12 01:52:03
【问题描述】:
系统有 16GB 内存。我们用于存储在哈希表链表中的节点结构大小为 38 字节。这表明我们可以在哈希表中存储多达 4.52 亿个节点。但只有在 1300 万个节点(大约)之后才会发生内存溢出。
相关代码段是这样的:
for (i=0;i<NO_OF_BUCKETS;i++)
{
nextptr = hashtable[i];
while (nextptr != NULL)
{
prevptr = nextptr;
nextptr = nextptr->next;
free(prevptr);
}
hashtable[i] = NULL;
}
【问题讨论】:
-
nextptr = nextptr->next;是什么意思??没有next到nextptr。只有NULL。它应该是prevptr->next = nextptr;prevptr = prevptr->next;和 NOfree(prevptr)否则你会失去指针。 -
“内存溢出”是什么意思?
-
@noMAD 不,假设
nextptr指向一个包含next成员的结构,该成员是指向同一类型的指针,代码没问题。命名并不理想。 -
您的代码看起来不错 - 但它似乎与您正在谈论的内容没有任何关系。它看起来像清理代码以释放哈希表中的节点。这和你的问题有什么关系?你的问题到底是什么是?你的内存不足了吗?你得到了什么错误?
-
所以你的代码释放了哈希表中的所有项目。听起来这不会导致内存不足错误,至少在已经释放了一些之后。可能是因为链表中有循环或其他结构问题而导致崩溃?
标签: c linked-list hashtable