2012-04-05 102 views
0

所以我的問題是,我通過值(它是一個浮點數)從我的C代碼中的一個函數傳遞給另一個函數的變量。出於某種原因,通過後該變量爲0。我有多個其他浮動值被傳遞,不是0(全部在同一個函數調用中),所以我不明白爲什麼這個是。這可能是因爲一些錯字,我只是沒有看到簡單:變量在一個函數中有值,在傳遞給另一個函數時變量爲0?

int cuda_call(float *h_DataA, float *h_Kernel, int numSmooths, float kernelSum, int KERNEL_R, int KERNEL_W, int DATA_W){ 

    printf("\n What am I here?: %f \n", kernelSum); 
    convolutionProgram(h_DataA, h_Kernel, numSmooths, kernelSum, KERNEL_R, KERNEL_W, DATA_W); 
    return 1; 
} 

extern "C" void convolutionProgram(float *h_DataA, float *h_Kernel, int numSmooths, float kernelSum, int KERNEL_R, int KERNEL_W, int DATA_W); 


void convolutionProgram(float *h_DataA, float *h_Kernel, int numSmooths, float kernelSum, int KERNEL_R, int KERNEL_W, int DATA_W){ 

    printf("\n what am I now? %f \n", kernelSum); 
    float 
     *d_DataA, 
     *d_DataB, 
     *d_Temp, 
    *d_Kernel; 
     ....... 
} 

到時候我得到的所謂功能第二打印,它爲0。

+0

該方法在兩個不同的文件,因此是外部「C」的東西。 – HillaryD 2012-04-05 18:42:16

+0

您需要首先對函數進行原型設計,或者將參數轉換爲整數來調用 – pizza 2012-04-06 03:26:01

+0

嘗試不使用extern c並將另一個函數編譯爲C++。 – 2012-04-13 00:38:57

回答

0

有沒有可能是你有不重建一個c文件的目標文件?這看起來像是一個簽名不匹配,它可能源自函數簽名更改而不重建兩個目標文件。

+0

我認爲,也許,但爲什麼所有其他的價值觀是正確的? numSmooths,KERNEL_R等都是正確的值。無論哪種情況,我都重建了多次對象文件。 – HillaryD 2012-04-05 18:45:59

相關問題