gpt4 book ai didi

c - 这个变量的值在我的 C 代码中如何变化?

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

<分区>

我在 C 中遇到了一个我以前从未遇到过的非常奇怪的问题。我已将其缩小为以下非常简单的片段。

变量是全局的,类型是:

    int cpd;
int nPart;

这里是相关的代码片段,我逐渐将其精简到产生问题所需的最低限度:

    printf("\ncpd1: %d\n",cpd);

int p;
for(p=1;p<=nPart;p++)
{
printf("\ncpd2: %d\n",cpd); exit(0);
}

...我得到的输出是这样的:

cpd1: 17

cpd2: 0

这怎么可能?!cpd 没有被重新分配,没有函数被调用……但它改变了吗?如何?!?!

这已经让我慢慢地发疯了很长一段时间了.........有什么想法吗?

谢谢你的时间,本。

编辑:当我从 gcc 的 makefile 参数中删除 -02 时,两个打印语句都告诉我 cpd = 0!

编辑:好的,我刚刚发现一个全局声明一次,初始化为 4.0,然后从未修改过的变量现在显然是 1.51086e-311 ...某处出了点问题...

编辑:已解决!:我有一个大小为 1000 的数组,需要超过 4000,并且尝试写入它会破坏它周围的内存。事实是,在那些打印语句附近的任何地方都不会访问这个数组,它是在同一个函数中访问的,但是,在更早的时候(大函数!)。打印语句之间奇怪的差异一定是使用 -O2 的一些奇怪的人工产物,因为没有 -O2,cpd 的两个打印都打印出损坏的版本。谢谢大家,没有你们的帮助我不可能解决这个问题!

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