在2D哈希表中正确索引数据
Index properly to data in 2D hash table
所以我有一个由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
,但不能保证它是空的,是你数组的一部分,甚至分配给你的程序。
解决这个问题最简单的方法是检查j
和i
是否总是小于b
。
在使用整数数组时没有遇到这种情况的原因只是运气。
对于整数数组,您仍然读取数组末尾以外的内容,但您将把找到的任何字节解释为整数。大多数时候,你可能只是在你的程序中读取一些其他的随机变量,所以不会发生错误。
在你的链表中,你把你找到的解释为一个包含指针的单元格。然后你解引用这个乱码指针,这意味着你不再访问内存"就在"数组之后,但可能在某个地方"很远"。
相关文章:
- 修改链表主函数代码,用户将在其中输入节点的索引和数据以及正确的消息
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 如何索引转换后的用户数据值?
- C++ STL 数据结构常时按索引推送/弹出/随机访问,并具有指向元素的可靠指针
- 如何将 std::vector 索引交换到<int>数据,将数据交换到索引
- 为什么我的代码没有对数组中第二个索引上的数据进行排序?
- 用于存储网格(将具有负索引)的数据结构
- 查找索引数据结构,例如`sTD :: vector`(非数组)
- 向量下标出的范围错误.即使向量的索引大于访问数据的索引,也会发生误差
- 多个快速读取器 单个慢速写入器:使用具有原子索引的阴影数据安全吗?
- 从右到左计算当前索引中的数据结构中的元素数,并打印每个元素的计数
- C++ LuaBridge 尝试索引用户数据值(本地"self")
- 如何创建辅助数据结构来跟踪 c++ 中 decrease_key 操作的堆索引
- 当结构数组在主线程中填充数据时,从结构数组的低索引元素读取是否线程安全
- 如何在cv :: cuda :: ptrstepszf数据上使用线性索引
- 在Boost多索引容器中搜索位字段数据
- 数据检索和索引
- 如何使用位表示访问可索引的数据结构
- 用于超大时间序列的最佳索引数据结构
- 在2D哈希表中正确索引数据