在2D哈希表中正确索引数据

Index properly to data in 2D hash table

本文关键字:索引 数据 2D 哈希表      更新时间:2023-10-16

所以我有一个由2d链表数组组成的哈希表。我有一个比较函数,我试图将每个链表的内容与周围的8个单元格进行比较。我尝试使用与2d整数数组相同的逻辑,通过创建两个for循环并摆弄增量。然而,在测试之后,我知道我是错的。这只是示例代码,我试图找出为什么我不允许修改网格位置。temp2这种错误。

Node* temp;
Node* temp2;
//grid is a filled 2d array of linked lists 
for(int j=0; j<b; j++)
{
    for(int i=0; i<b; i++)
    {
        //This works for ex printing out the entire grid
        temp = grid[j][i];
        while(temp != NULL)
        {
            cout << temp->xval;
            temp = temp->next;
        }   
        //However this is not allowed
        temp2 = grid[j+1][i]
        while(temp2 != NULL)
        {
            cout << temp2->xval;
            temp2 = temp2->next;
        }    
    }
}

您可能试图访问一个不存在的"单元格":

    temp2 = grid[j+1][i]
    while(temp2 != NULL)
    {
        cout << temp2->xval;
        temp2 = temp2->next;
    }   

你所做的就是检查temp2的内存不是null,但不能保证它是空的,是你数组的一部分,甚至分配给你的程序。

解决这个问题最简单的方法是检查ji是否总是小于b

编辑:

在使用整数数组时没有遇到这种情况的原因只是运气。

对于整数数组,您仍然读取数组末尾以外的内容,但您将把找到的任何字节解释为整数。大多数时候,你可能只是在你的程序中读取一些其他的随机变量,所以不会发生错误。

在你的链表中,你把你找到的解释为一个包含指针的单元格。然后你解引用这个乱码指针,这意味着你不再访问内存"就在"数组之后,但可能在某个地方"很远"。