循环中未执行的C代码

循环中未执行的C代码,c,arrays,loops,C,Arrays,Loops,背景:整个程序设计用于在参考图像和1800个目标图像之间执行2D DIC(用于断层重建)。在我的代码中,有一个用于循环块 for (k=0; k<kmax; k++) { K=nm12+(k*(h-n+1))/(kmax-1); printf("\nk=%d\nL= ", K); for (l=0; l<lmax; l++) { ///For each subset, calculate and store its mean and s

背景:整个程序设计用于在参考图像和1800个目标图像之间执行2D DIC(用于断层重建)。在我的代码中,有一个用于循环块

for (k=0; k<kmax; k++)
{
    K=nm12+(k*(h-n+1))/(kmax-1);
    printf("\nk=%d\nL= ", K);
    for (l=0; l<lmax; l++)
    {
        ///For each subset, calculate and store its mean and standard deviation.   
        ///Also want to know the sum and sum of squares of subset, but in two sections, stored in fm/df[k][l][0 and 1].
        L=nm12+(l*(w-n+1))/(lmax-1);
        printf("%d ", L);
        fm[k][l][0]=0;
        df[k][l][0]=0;
        fm[k][l][1]=0;
        df[k][l][1]=0;
        ///loops are j then i as it is more efficient (saves m-1 recalculations of b=j+L; 
        for (j=0; j<m; j++)
        {
            b=j+L;
            for (i=0; i<M; i++)
            {
                a=i+K;
                fm[k][l][0]+=ref[a][b];
                df[k][l][0]+=ref[a][b]*ref[a][b];
            }

            for (i=M; i<m; i++)
            {
                a=i+K;
                fm[k][l][1]+=ref[a][b];
                df[k][l][1]+=ref[a][b]*ref[a][b];
            }
        }
        fm[k][l][2]=m2r*(fm[k][l][1]+fm[k][l][0]);
        df[k][l][2]=sqrt(df[k][l][1]+df[k][l][0]-m2*fm[k][l][2]*fm[k][l][2]);
        a+=1;
    }
}

其中h=1040和w=1388是图像的维度。

您没有提到您正在使用的编译器、IDE或框架。但是隔离问题的一种方法是创建一个新的小(控制台)项目,只包含您发布的代码片段。这样,您将消除大多数类型的输入/线程/堆栈/内存/编译器等问题。
如果没有,它将足够小,可以将整个样本发布在stackoverflow上,供我们分解和思考


因此,您应该为您的算法创建一个自包含的单元测试。

看起来这可能不足以说明原因。在调试器中单步执行时会发生什么?另外,请注意,“已实现”与“已执行”不是一回事。。。你似乎想在你的问题标题中执行。好吧,看来问题不在那一行,但在前面,对于l>=10,fm[k][l][2]=1616,df[k][l][0和1]的值是822608640和329043456,这三个值实际上导致了df[k][l][2]=0的正确值。可读性在这里确实是个问题。使用这些数组无法轻松阅读。@TonyTheLion-希望看到您评论的“轻量级”版本:)-{按要求}-天哪,有很多下标和星号。您的第一个任务是清理这些内容,以便您的代码实际上是清晰的。。。因为,现在,我宁愿用口齿不清的括号挖出我的眼睛。(一些代码注释也不会有什么坏处!)好的,这样做之后,它似乎工作得很好,所以整个程序可能存在内存问题…增加堆栈大小之前,所有与堆栈大小相关的错误都会导致代码的执行终止,这就是为什么我不得不对许多数组使用malloc。。。但我会调查的。
    double **dark, **flat, **ref, **target, **target2, ***gm, ***dg;
    dark=(double**)malloc(h * sizeof(double*));
    flat=(double**)malloc(h * sizeof(double*));
    ref=(double**)malloc(h * sizeof(double*));
    target=(double**)malloc(h * sizeof(double*));
    target2=(double**)malloc(h * sizeof(double*));
    size_t wd=w*sizeof(double);
    for (a=0; a<h; a++)
    {
        dark[a]=(double*)malloc(wd);
        flat[a]=(double*)malloc(wd);
        ref[a]=(double*)malloc(wd);
        target[a]=(double*)malloc(wd);
        target2[a]=(double*)malloc(wd);
    }