我有一个奇怪的问题。我有一个动态创建的二维数组 Content,它的高度为 _h,宽度为 _w(在我的实现中,行是第一个参数,列是第二个参数,这在上下文中是有意义的)。两个索引可能超出范围,这是设计使然,如果是这样,那么索引将“环绕”数组:
Content[v.iget()%_h][u.iget()%_w];
v 和 u 是我自己班级的对象;它们内部有一个 __int64 值,而 iget() 如下所示:
return value>>precision;
它返回一个通常的 32 位 int。我用 % 按高度或宽度“包装”这个 int 值,显然余数总是 0 <= r < max。所以这个 % 操作还可以防止任何可能的越界情况,但我有时会在这条线上得到访问冲突。当我查看 v 和 u 的值时,它们类似于 -7753978124 - 实际上,在我的上下文中不应该发生负数(所以我还没有寻找导致它的原因),但无论如何,. iget() 应该把它变成一个普通的整数,%_h 或 %_w 应该把它放在边界内,但是我得到了访问冲突。这怎么可能?