所以,我有这个for
循环:
double spec = 0, tot = 0;
for (int i = 0; i < omega_algo.Length; i++)
{
if (omega_algo[i] > 0)
spec = Math.Sqrt(omega_algo[i]);
else
spec = 0;
tot += spec;
}
myArray.Length = 50
的位置。
我在调试时得到IndexOutOfRangeException
并看到 i
50
。
所以,当for
循环不应该( i < myArray.Length
是false
)时,它就会进入!
这种例外仅在偶然发生,这使得它更加奇怪。
有人对此有解释/解决方法吗?我错过了什么,或者这可能是一个奇怪的Visual Studio错误?
修改
我编辑了for循环以显示代码
没有 i 正在增加且 omega_algo 数组根本没有变化。
答案 0 :(得分:0)
编辑:
根据以下评论,我编写了一个示例应用,您的代码应该按原样运行。
如果你的数组确实长度为50,那么i
的值永远不会是50.唯一可行的方法是改变i
里面的值{环。
您是否可以提供更多代码来显示使用方式/位置的上下文?如何定义数组等?
答案 1 :(得分:-1)
如果在单个线程上执行,您的代码应该可以正常工作。你有编辑数组的任何线程或异步工作吗?
如果是这样,只需在访问数组之前和编辑之前锁定数组。
lock(myArray)
{
for (int i = 0; i < myArray.Length; i++)
{
int someVar = myArray[i]; //this is where exception is thrown when i=50
}
}
编辑: 由于omega_algo数组根本没有变化,因此这不是一个线程问题。