看看这个代码变量值变脏:C:在返回到调用函数
extern void f3(int);
void f2 (int foo) {
//some stuff
f3(foo)
printf("f2:%d\n",foo);
}
void f1 (int foo) {
//some stuff
f2(foo);
printf("f1:%d\n",foo);
}
int main() {
//some stuff
f1(foo)
//other stuff
return 0;
}
我的问题是,我有这样的输出:
f2: 1060 //this is the correct value
f1: 1065294485
还有就是之间无码在函数f2中打印和函数结束。函数f2的调用和函数f1中的打印之间没有代码。这种价值变化有多可能? 我需要在堆栈中分配大数据结构,并使用ulimit -s 2^28。我还使用gcc -mO0 -m32 -msse进行编译,因为函数f3是使用sse写入nasm。问题依赖于这个吗? 向我咨询其他可能有助于理解问题的内容。
编辑:我示出了真实的F2()函数:
void upgma_start(float* centroids,int k,int c,int d,float* size,float *md) {
float mc1 [d];
float mc2 [d];
upgma(centroids,k,c,d,size,md,mc1,mc2);
printf("uuu:::%d:\n",k);
}
功能UPGMA是示例代码的函数f3,k为FOO变种
f3的功能非常强大吗?你可以用虚拟函数替换它,并检查结果是什么? – maja
这里最重要的是你把东西放在哪里//其他的东西 –
我不能再现你所得到的东西。我们需要一个[最小化,完整和可验证的示例](http://stackoverflow.com/help/mcve) – Riley