看看這個代碼變量值變髒: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