C++中while循环体执行一半不动了

程序可以运行,但while循环体执行一半不动了。以下是while循环:

    while(flag>0)
    {
        flag=1;
        cout<<"第"<<k<<"次迭代\n";
        for(i=2;i<X;i++)//有功功率的不平衡量
        {
            double S1=0;
            for(j=1;j<X;j++)
            {
                S1=S1+U[j]*(G[i][j]*cos(D[i]-D[j])+B[i][j]*sin(D[i]-D[j]));
            }
            DP[i]=P[i]-U[i]*S1;
            if(fabs(DP[i])>c||fabs(DP[i])==c)
                flag=flag+1;
            cout<<"DP["<<i<<"]="<<DP[i]<<' '<<endl;
        }
        for(i=4;i<X;i++)//无功功率的不平衡量
        {
            double S2=0;
            for(j=1;j<X;j++)
            {
                S2=S2+U[j]*(G[i][j]*sin(D[i]-D[j])-B[i][j]*cos(D[i]-D[j]));
            }
            DQ[i]=Q[i]-U[i]*S2;
            if(fabs(DQ[i])>c||fabs(DQ[i])==c)
                flag=flag+1;
            cout<<"DQ["<<i<<"]="<<DQ[i]<<' '<<endl;
        }
        cout<<'\n';

        if(flag==1)//满足收敛条件,功率不平衡量都小于允许误差
            flag=0;
        
        /*计算雅可比子矩阵元素*/
        for(i=2;i<X;i++)
        {
            for(j=2;j<X;j++)
            {
                H[i][j]=-U[i]*U[j]*(G[i][j]*sin(D[i]-D[j])-B[i][j]*cos(D[i]-D[j]));
                cout<<H[i][j]<<" ";
            }
        }
              //........还有其他的,但到上一个for语句就已经不输出了
        }

运行结果:

img

应该是:H[i][j]=-U[i]U[j](G[i][j]*sin(D[i]-D[j])-B[i][j]*cos(D[i]-D[j])) 这句出错,注释这句看能否通过,能通过就是这句问题。原因可能:各给数组是否正确初始化并有值

你的循环中X是多少