2016-03-03 108 views
2

我有一個巨大的C工程。 現在我需要一個C++函數來填充一些變量。在C項目中傳遞指向C++函數的指針

將函數聲明爲extern「C」,從C項目中調用函數是沒有問題的。

問題是,我需要傳遞一個指向C++函數的指針,並且在函數中,我想爲指針賦值。 但正是在這一點上,程序崩潰與「分段錯誤」。

有沒有辦法讓這項工作?還是不可能在C和C++之間以這種方式使用指針?


調用在C功能線程:

Restwo = pthread_create(&num, NULL, (void *) function, &var); 

部首

#ifdef __cplusplus 
extern "C" 
{ // Dies sorgt dafür, dass der Header sowohl in C als auch in C++ funktioniert 
#endif 

    int function(int *pITS); 

#ifdef __cplusplus 
} 
#endif 

C++函數

extern "C" { 
    int getNewLsaSignals(int *var) { 
     printf("Successfully started\n"); //works 
     var = 19; //doesn't work 
     //insert some c++ code here 
    } 
} 
+0

您還需要確定您實際上正在爲'var'分配內存。 –

+0

實際上,變量是一個複雜的結構體,它已經充滿了數據。在extern C++函數中,我只是想改變這些值。所以已經爲var分配了內存。 – Trikolix

回答

4

i want to assign a value to the pointer.

在這種情況下,你需要改變

var = 19; 

*var = 19; 

因爲,最有可能的,var = 19;使指針指向內存的位置,是從你的應用程序無法訪問,所以隨後對該指針的取消引用將會調用undefined behavior

另外,在直接解除引用之前檢查傳入指針的NULL幾乎總是安全的。

+0

這應該是正確的答案。 – sahel

+0

他意味着這是正確的答案 – Nik

+0

@IlDivinCodino好的,那麼好。作爲非英語母語的人,有時候我很難理解其他方言。 –