是否有任何针对结构的言论如下。在发布模式下,Visual Studio似乎忽略了i< 10并执行循环结束。如果我设置了一个断点,我会看到我从0到9运行并在所有进一步的迭代中保持在9。如果我printf i,我在10次迭代后得到一个错误,因为arr只有10个字段。很奇怪。请帮忙。
for (i = 0; i < 10; i++){
switch (arr[i].type1){
case A:
//something
break;
case B:
switch (arr[i].type2){
//something
}
break;
default:
break;
}
}
谢谢!
编辑:我删除了所有switch语句,并用if语句替换它们。现在工作得很好。我仍然很难相信我是对的并且Visual Studio错了。那个程序中我所有的其他Switch语句呢? :/
答案 0 :(得分:2)
我怀疑
// something
可能与它有关。如果按原样运行此代码(删除实际案例代码) - 是否会发生?
如果你拿整个开关把它放在一个函数中怎么样?
您可能会直接或{或某些内存限制问题'在// something
中某处更改。
答案 1 :(得分:0)
将循环变量更改为j并创建循环的第一行:
int i = j;
它还能做到吗?
答案 2 :(得分:0)
你的例子没有错。也许你在代码的其他部分有一些意外的堆栈覆盖或类似的东西,在那个地方引入了奇怪的副作用(并没有意义进行调试会话)?
答案 3 :(得分:0)
只要我不知道// something
做了什么,我就会给你最好的想法,我已经知道了;
如果这只发生在发布模式,我猜想编译器完成的优化可能是这种奇怪行为的原因。
如果您可以使用上面给出的确切代码可靠地进行此操作,我会说您应该尝试关闭优化并查看是否有帮助。