while循环判断条件的数组越界后,循环内部j的值已经满足跳出循环条件,但实际循环没有跳出
即使越界后循环条件依旧满足,但也应该进入内部的break跳出循环
#include
struct test
{
int num[10];
};
struct test val;
int main(int argc, char const *argv[])
{
for (size_t i = 0; i < 10; i++)
{
val.num[i] = i+1;
}
int j = 0;
while (val.num[j] != 0)
{
if (j < 10)
printf("num[%d]:[%d]\n",j, val.num[j]);
else
break;
j++;
printf("j:[%d]\n", j);
}
return 0;
}
num[0]:[1]
j:[1]
num[1]:[2]
j:[2]
num[2]:[3]
j:[3]
num[3]:[4]
j:[4]
num[4]:[5]
j:[5]
num[5]:[6]
j:[6]
num[6]:[7]
j:[7]
num[7]:[8]
j:[8]
num[8]:[9]
j:[9]
num[9]:[10]
j:[10]
num[10]:[1882228992]
j:[11]
num[11]:[1]
j:[12]
num[12]:[-1982460]
j:[13]
num[13]:[-1982608]
j:[14]
dev运行没有问题
VS里运行没有问题,会不会是你修改代码后没有重新编译
从你的代码看,应该是不会出现这种问题的,相信科学
当 j >= 10 会break,不可能死循环