所以我有一个由二维链表列表组成的哈希表。我有一个比较功能,我尝试将每个链表的内容与它周围的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;
}
}
}
答案 0 :(得分:0)
您可能正在尝试访问“&#39;当你这样做时不存在:
temp2 = grid[j+1][i]
while(temp2 != NULL)
{
cout << temp2->xval;
temp2 = temp2->next;
}
您所做的只是检查temp2
处的内存是否不是null
,但不能保证它是空的,是阵列的一部分,甚至是分配给您的程序。
解决此问题的最简单方法是检查j
和i
是否始终小于b
。
编辑:
使用整数数组时你没有遇到这个问题的原因只是运气。
使用整数数组,您仍然可以读取超出数组末尾的内容,但是您可以将任何字节解释为整数。大多数情况下,您可能只是在程序中读取其他随机变量,因此不会发生错误。
使用您的链接列表,您可以解释您所发现的包含指针的单元格。然后你取消引用这个乱码指针,这意味着你不再访问内存&#39;就在&#39;之后。阵列但可能在某个地方很远的地方#39;这使得您更有可能导致段错误。