gpt4 book ai didi

循环内的 C 代码未被执行

转载 作者:太空宇宙 更新时间:2023-11-04 08:54:03 25 4
gpt4 key购买 nike

背景:整个程序的目的是在引用图像和1800个目标图像之间进行2D DIC,(用于层析重建)在我的代码中,有这个for循环 block

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;
}
}

每次 l 达到 10 行 df[k][l][2]=sqrt(df[k][l][1]+df[k][l][0]-m2* fm[k][l][2]*fm[k][l][2]); 似乎不再执行。我的意思是调试器显示 df[k][l][2] 的值没有从零正确更改为总和。此外,df[k][l][0 和 1] 保持不变,无论 k 和 l,只要 l>=10。

kmax=15,lmax=20,n=121,m=21,M=(3*m)/4=15,nm12=(n-m+1)/2=50。

数组 fm 和 df 是 double 组,声明为 double fm[kmax][lmax][3], df[kmax][lmax][3];

此外,a+=1; 行只是用作检查 df[k][l][2] 值的断点,对代码没有影响功能。

如能提供有关发生这种情况的原因、如何解决等方面的任何帮助,我们将不胜感激!

编辑:更多信息。

数组 ref(包含引用图像像素值)是一个动态数组,使用 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);
}

其中 h=1040 和 w=1388 是图像的尺寸。

最佳答案

您没有过多提及您使用的是什么编译器、IDE 或框架。但隔离问题的一种方法是创建一个新的小型(控制台)项目,其中仅包含您发布的代码段。通过这种方式,您将消除大多数类型的输入/线程/堆栈/内存/编译器等问题。
如果没有,它会足够小​​,可以将整个示例发布到 stackoverflow 上,供我们拆解和思考。

因此,您应该为您的算法创建一个独立的单元测试。

关于循环内的 C 代码未被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18230458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com