找到这个奇怪的bug?它没有注意到任何事情就崩溃了

时间:2014-08-01 17:14:39

标签: c++ crash buffer

我在我的代码中编写了一个应该创建某种矩阵的函数。当尺寸很小时它很好,但是当它变大时,它会在这个函数的中间崩溃而不提供任何信息。我用调试和发布模式做到了这一点并发生了同样的事情。什么可能出错?有人建议我可能是缓冲区溢出。

kl.mechelms大于某个数字时,此函数会崩溃。以下代码使用函数并获取3乘3矩阵并将其存储在kl.scoff中,其大小为[3][3][kl.mechelms][kl.mechelms]。当kl.mechelms大于7000时会出现问题,但我们需要的远远超过代码。

我在这部分中使用的函数Calc_3D会导致问题吗?我认为它不应该只读取一些值。

for (int z = 0;z<3;z++) {
    for (int q = 0;q<3;q++) {
        kl.scofsarr[z][q] = new double *[kl.mechelms];
    }
}

for (int i = 0;i<kl.mechelms;i++) {
    cout << "element " << i << "of " << kl.mechelms << endl;
    kl.comments << "element " << i << "of " << kl.mechelms << endl;
    for (int z = 0;z<3;z++) {
        for (int q = 0;q<3;q++) {
            kl.scofsarr[z][q][i] = new double[kl.mechelms];
        }
    }

    for (int j = 0;j<kl.mechelms;j++) {

        Calc_3D(i,j, kl.elmx[j], kl.elmy[j], kl.elmz[j], kl.anglemat[j], kl.dip[j], kl.elmx[i],kl.elmy[i],kl.elmz[i],
                kl.elma[i],kl.rectza,kl.anglemat[i],kl.dip[i], kl.G, kl.v, kl.scofs, kl.rdepth);


        for (int z = 0;z<3;z++) {
            for (int q = 0;q<3;q++) {
                kl.scofsarr[z][q][i][j] = kl.scofs[z][q];
            }
        }

    }
}

0 个答案:

没有答案