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

时间:2016-09-10 22:37:42

标签: c++ multidimensional-array hashtable

所以我有一个由二维链表列表组成的哈希表。我有一个比较功能,我尝试将每个链表的内容与它周围的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;
        }    
    }
}

1 个答案:

答案 0 :(得分:0)

您可能正在尝试访问“&#39;当你这样做时不存在:

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

您所做的只是检查temp2处的内存是否不是null,但不能保证它是空的,是阵列的一部分,甚至是分配给您的程序。

解决此问题的最简单方法是检查ji是否始终小于b

编辑:

使用整数数组时你没有遇到这个问题的原因只是运气。

使用整数数组,您仍然可以读取超出数组末尾的内容,但是您可以将任何字节解释为整数。大多数情况下,您可能只是在程序中读取其他随机变量,因此不会发生错误。

使用您的链接列表,您可以解释您所发现的包含指针的单元格。然后你取消引用这个乱码指针,这意味着你不再访问内存&#39;就在&#39;之后。阵列但可能在某个地方很远的地方#39;这使得您更有可能导致段错误。