システムには16GBのRAMがあります。ハッシュテーブルのリンクリストに格納するためのノード構造は、38バイトのサイズです。これは、ハッシュテーブルに最大452millionのノードを格納できることを示しています。しかし、1300万ノード(約)後にのみ、メモリのオーバーフローが発生します。C-プログラム:リンクリストの配列を使用したハッシュテーブルのメモリオーバーフロー
関連するコード・セグメントはこれです:今、それは間違った前提だ
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;とはどういう意味ですか? 'nextptr'に' next'はありません。 'NULL'だけがあります。これは 'prevptr-> next = nextptr;' 'prevptr = prevptr-> next;' 'と' 'prevptr''でなければなりません。 – noMAD
「メモリオーバーフロー」とはどういう意味ですか? –
@noMADいいえ、 'nextptr'が同じタイプへのポインタである' next'メンバーを含む構造体を指しているとすれば、コードは問題ありません。命名は準最適です。 –