2011-08-24 58 views
3

可以說我有以下幾點:指向指針語法問題

void init_gpu(cuComplex* d_hhBuff) 
{ 
    cutilSafeCall(cudaMalloc((void **)&d_hhBuff, memsize)); 
} 

和我喜歡的東西

cuComplex *my_buff; 
init_gpu(my_buff); 

那麼稱呼它,init_gpu返回時,它不是指向設備內存該分配的cudaMalloc。

我該如何修改它,以便init_gpu的調用者將my_buff指向cudaMalloc創建的修改的d_hhBuff?

回答

6

問題是您正在通過值傳遞指針。函數頭更改爲

void init_gpu(cuComplex *& d_hhBuff) 
2

d_hhBuf是一個本地副本。你應該做的是通過引用傳遞指針:

void init_gpu(cuComplex * & d_hhBuff) 
0

假設你的typedef:

typedef cuComplex* ComplexPointer; 

,寫一個函數:

void ChangeComplex(ComplexPointer ptr) 
{ 
    ptr = new cuComplex; 
} 

,並稱之爲:

ComplexPointer cptr; 
ChangeComplex(cptr); 

你會看到c所有的功能(和不是知道typedef)?你會說,ptrcptr)是按值傳遞的,而不是通過引用/指針傳遞的,不會改變。

現在考慮這一呼籲:

cuComplex* ptr; 
ChangeComplex(cptr); 

這是上面完全相同,你實際上是通過ComplexPointer型 - 它只是被按值傳遞。

終於明白了改簽名:

void ChangeComplex(cuComplex*ptr); 

它仍然是相同的 - 你是通過cuComplex*的價值,而不是參考!