gpt4 book ai didi

c - 当我插入打印语句时变量值发生改变?

转载 作者:行者123 更新时间:2023-11-30 17:21:35 25 4
gpt4 key购买 nike

我正在处理 10 个变量的数组。我正在计算互相关。当我插入 printf 语句(从 return 0 开始的最后两行)以包含返回的值时,sxy 的值从第二次迭代开始就会发生变化(其中 2 行以粗体显示)。查看我得到的值 - 没有 printf 语句:

sxy = 0.000000
sxy = -0.441021, denom=0.944295
-5 -0.467037
sxy = 0.000000
sxy = **-0.232003**, denom=0.944295
-4 -0.245689
sxy = 0.000000
sxy = **0.066825**, denom=0.944295
-3 0.070767
sxy = 0.000000
sxy = -0.080936, denom=0.944295
-2 -0.085711
sxy = 0.000000
sxy = 0.304371, denom=0.944295
-1 0.322326

只需包含 printf 语句即可:

sxy = 0.000000
sxy = -0.441021, denom=0.944295
sxy = 0.000000
sxy = **-0.341112**, denom=0.944295
sxy = 0.000000
sxy = **-0.064583**, denom=0.944295
sxy = 0.000000
sxy = -0.085263, denom=0.944295
sxy = 0.000000
sxy = 0.333693, denom=0.944295
sxy = 0.000000
sxy = 0.625614, denom=0.944295
sxy = 0.000000
sxy = 0.074215, denom=0.944295

这是代码:

int cxcor(float x[], float y[], float r[])
{
/* Calculate the mean of the two series x[], y[] */
int i, j, delay, maxdelay = MAXM/2, n = MAXM;
float sx, sxy, mx = 0;
float sy, denom, my = 0;
float rr[MAXM];

for (i=0;i<n;i++) {
mx += x[i];
my += y[i];
}
mx /= n;
my /= n;

/* Calculate the denominator */
sx = 0;
sy = 0;
for (i=0;i<n;i++) {
sx += (x[i] - mx) * (x[i] - mx);
sy += (y[i] - my) * (y[i] - my);
}
denom = sqrt(sx*sy);

/* Calculate the correlation series */
for (delay = -maxdelay; delay < maxdelay; delay++) {
sxy = 0;
printf ("sxy = %f \n", sxy );
for (i=0;i<n;i++) {
j = i + delay;
while (j < 0)
j += n;
j %= n;
sxy += (x[i] - mx) * (y[j] - my);
}
printf ("sxy = %f, denom=%f\n", sxy, denom);
tr = sxy / denom;
k = delay;
r[ k] = tr;
printf ("%d\t %f\n", k, r[k]);


}


return 0;
}

最佳答案

这几乎肯定表明 undefined behaviour代码中的某处。

这可能是由于读取未初始化的变量或读取/写入超出了数组的末尾。

如果通过检查代码找不到问题,请使用 Valgrind这可能是一个很好的策略。

关于c - 当我插入打印语句时变量值发生改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28265948/

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