while循环条件越界导致内部break没有生效

问题遇到的现象和发生背景

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,不可能死循环