为什么数据的改变会导致访问位置发生冲突?

我是新人,最近按老师要求写了个小代码,如下图,但有个bug在网上搜了好久没找到解决方法,麻烦大神看一下,这里面杨氏模量ys设置为1的时候,程序运行正常,当设置为10的时候就会显示读取位置发生访问冲突

#include<stdio.h>
#include<math.h>
double SIG[200][4] = { 0 };
double xxp[200][4] = { 0 };
double ptime[8000][4] = { 0 };
double LOC[400] = { 0 };
double xp[200] = { 0 };
double MP[200] = { 0 };
double ssp[200] = { 0 };
double hhh[200] = { 0 };
double snp[200] = { 0 };
double dssp[200] = { 0 };
double dsnp[200] = { 0 };
double vg[400] = { 0 };
double vp[200] = { 0 };
double dvp[200] = { 0 };
double fext[400] = { 0 };
double vpbar[200] = { 0 };
double f[400] = { 0 };
int NC[200] = { 0 };
double xc[200] = { 0 };
double tt[80001] = { 0 };
double xx[200] = { 0 };
int main()
{
    int i, j, NB, NS, fbc, ntime, NE = 200;
    int nppc = 1;
    double dt, tfinal, fbn, rho = 1.0;
    double ys = 10000.;
    printf("ys=%lf\n", ys);
    NE = NE * 1;
    double c, c1 = 0, c2 = 0, A = 1., L = 50.;
    c = sqrt(ys / rho);
    printf("c=%lf\n", c);
    NS = floor(NE / 5) + 2;
    fbc = NS;
    fbn = 1.;
    NB = NE + NS;
    dt = 0.1 * L / NE / c;
    printf("dt=%f\n", dt);
    tfinal = 40.0 * L / c;
    printf("tfinal=%f\n", tfinal);
    ntime = round(tfinal / dt) + 1;
    printf("ntime=%d\n", ntime);

    int nntime = round(ntime / 10);
    printf("nntime=%d\n",nntime );
    int npfc = nppc * NE - 1;
    int n1 = round(ntime * 1 / 4), n2 = round(ntime * 1.2 / 4), n3 = round(ntime * 3 / 4), n4 = ntime;
    int NN = round(2.0 * NE);
    double le = L / NE;
    printf("NN=%d\n", NN);

    for (i = 0; i < NN; i++)
    {
        LOC[i] = i * le;
        /*printf("LOC[%d]=%lf\n", i, LOC[i]);*/
    }
    printf("nppc*NE=%d\n", nppc * NE);
    for (i = 0; i < nppc * NE; i++)
    {
        xp[i] = (NS - 1. + 0.5 / nppc + i / nppc) * le;
        /*printf("xp[%d]=%lf\n", i, xp[i]);*/
    }
    for (i = 0; i < nppc * NE; i++)
    {
        MP[i] = rho * A * le / nppc;
        /*printf("MP[%d]=%lf\n", i, MP[i]);*/
    }
    double t = 0.0, nb = 1.0, lp = 0.5 / nppc * le;
    int n = 1, b0 = -800;

    while (t <= tfinal / 1 + 1.0e-6)
    {
        double MVG[400] = { 0 };
        double MG[400] = { 0 }; 
        double fint[400] = { 0 }; 
        double fb[400] = { 0 }; 
        double b = b0 * nb * t / tfinal;
        /*printf("b=%f\n", b);*/
        for (i = 0; i < nppc * NE; i++)
        {
            NC[i] = floor(xp[i] / le) + 1;
            /*printf("NC[%d]-1=%d\n", i, NC[i]-1);
            printf("LOC[NC[%d]-1]=%lf\n", i, LOC[NC[i] - 1]);*/
            /*printf("floor(xp[%d]/le)+1=%\n", i, floor(xp[i]/le)+1);*/
            xc[i] = (xp[i] - LOC[NC[i]-1]) / le;
            /*printf("xp[%d]=%lf,NC[%d]=%d,LOC[%d]=%lf,le=%lf,xp[%d]-LOC[%d]=%lf,(xp[%d]-LOC[%d])/le=%lf\n", i, xp[i], i, NC[i],NC[i]-1, LOC[NC[i]-1],le,i,NC[i]-1,xp[i]-LOC[NC[i]-1],i,NC[i]-1,(xp[i] - LOC[NC[i] - 1]) / le);
            /*printf("LOC[%d]=%lf\n", NC[i]-1, LOC[NC[i] - 1]);*/
            /*printf("%lf", xc[1]);*/
            /*printf("LOC[NC[%d]-1]=%lf\n", i, LOC[NC[i] - 1]);*/
        }
        for (i = 0; i < nppc * NE; i++)
        {
            MG[NC[i] - 1] = MG[NC[i] - 1] + MP[i] * (1 - xc[i]);
            MG[NC[i]] = MG[NC[i]] + MP[i] * xc[i];
            MVG[NC[i] - 1] = MVG[NC[i] - 1] + MP[i] * vp[i] * (1 - xc[i]);
            MVG[NC[i]] = MVG[NC[i]] + MP[i] * vp[i] * xc[i];

            fint[NC[i] - 1] = fint[NC[i] - 1] + MP[i] / rho * ssp[i] / le;
            fint[NC[i]] = fint[NC[i]] - MP[i] / rho * ssp[i] / le;
        }
        fext[NB - 1] = fbn;

        for (i = 0; i < NN; i++)
        {
            f[i] = fint[i] + fext[i] + fb[i];
        }

        f[fbc - 1] = 0.0;
        for (i = 0; i < NN; i++)
        {
            MVG[i] = MVG[i] + f[i] * dt;
        }
        MVG[fbc - 1] = 0.0;

        for (i = 0; i < nppc * NE; i++)
        {
            dvp[i] = f[NC[i] - 1] * (1 - xc[i]) * dt / MG[NC[i] - 1] + f[NC[i]] * xc[i] * dt / MG[NC[i]];
            vpbar[i] = MVG[NC[i] - 1] * (1 - xc[i]) / MG[NC[i] - 1] + MVG[NC[i]] * xc[i] / MG[NC[i]];
        }
        for (i = 0; i < nppc * NE; i++)
        {
            vp[i] = vp[i] + dvp[i];
            xp[i] = xp[i] + vpbar[i] * dt;
        }

        for (i = 0; i < NN; i++)
        {
            MVG[i] = 0;
        }

        for (i = 0; i < nppc * NE; i++)
        {
            MVG[NC[i] - 1] = MVG[NC[i] - 1] + MP[i] * vp[i] * (1 - xc[i]);
            MVG[NC[i]] = MVG[NC[i]] + MP[i] * vp[i] * xc[i];
        }
        for (i = 0; i < nppc * NE; i++)
        {
            vg[NC[i] - 1] = MVG[NC[i] - 1] / MG[NC[i] - 1];
            vg[NC[i]] = MVG[NC[i]] / MG[NC[i]];
        }
        vg[fbc - 1] = 0.0;

        for (i = 0; i < nppc * NE; i++)
        {
            dsnp[i] = (-vg[NC[i] - 1]) + vg[NC[i]] / le * dt;
        }

        for (i = 0; i < nppc * NE; i++)
        {
            snp[i] = snp[i] + dsnp[i];
        }
        for (i = 0; i < nppc * NE; i++)
        {
            ssp[i] = snp[i]*ys;
        }



        if (n == n1)
        {
            for (i = 0; i < nppc * NE; i++)
            {
                SIG[i][0] = ssp[i];
                xxp[i][0] = xp[i];
            }
        }
        if (n == n2)
        {
            for (i = 0; i < nppc * NE; i++)
            {
                SIG[i][1] = ssp[i];
                xxp[i][1] = xp[i];
            }
        }
        if (n == n3)
        {
            for (i = 0; i < nppc * NE; i++)
            {
                SIG[i][2] = ssp[i];
                xxp[i][2] = xp[i];
            }
        }
        if (n == n4)
        {
            for (i = 0; i < nppc * NE; i++)
            {
                SIG[i][3] = ssp[i];
                xxp[i][3] = xp[i];
            }
        }
        int nnt = floor(n / 10);
        if (n == nnt * 10)
        {
            ptime[nnt - 1][0] = t;
            ptime[nnt - 1][1] = xc[npfc - 1];
            ptime[nnt - 1][2] = xc[nppc*NE-1];
            ptime[nnt - 1][3] = ssp[npfc - 1];
        }
        if (n == 1000)
        {
            for (i = 0; i < nppc * NE; i++)
            {
                hhh[i] = ssp[i];
            }
        }
        n = n + 1;
        t = t + dt;
    }

    for (i = 0; i < ntime; i++)
    {
        tt[i] = tfinal / (double)(ntime - 1) * i;
    }
    for (i = 0; i < NE; i++)
    {
        xx[i] = L / (NE - 1) * i;
    }

    double xc[200] = { 0 }; 
    double yc[200] = { 0 }; 
    double Length = L * (1 + rho * b0 * L / 2 / ys);
    double Error = 0;
    double W = -rho * b0 * L;
    for (i = 0; i < NE * nppc; i++)
    {
        xc[i] = (i + 0.5) / nppc * Length / NE;
        yc[i] = ys * (sqrt(2 * rho * b0 * (Length - xc[i]) / ys + 1) - 1);
        Error = Error + fabs(yc[i] / 4 - SIG[i][0]) * 2 * lp / W / Length;
        printf("Error=%lf\n", Error);
    }
    printf("Error=%lf", Error);
    return 0;
}

如有解决,不胜感激!

在报错的地方调试下,看看是不是数组内存越界的问题。
注意数组的下标范围是0 ~ 长度-1