我正在使用C開發的庫(特別是:HTK)。我已經對源進行了一些修改,並嘗試從函數獲取指針(到鏈表的開始處)。 不要進入太多細節;說我有一個名爲OutType的結構。在我的C++代碼中,我聲明: OutType * Out;並將它傳遞給函數LName(.....,OutType * Out) 現在,在C庫中,LName接受參數Out,並調用名爲SaveH的函數,其中Out是返回值(Out = SaveH (...))並且在SaveH中,Out被malloc化爲OutType returnOut =(OutType *)malloc(1,sizeof(OutType)); 據我所知,Out完全是malloc'ed,並且在LName函數中,我可以獲取分配的內存區域的地址。但是,當我返回到我的C++代碼中,在那裏我調用LName並將Out作爲參數傳遞時,該參數始終具有0作爲地址。 如果我保留所有內容,但只需更改SaveH,以便Out不是返回值,而是一個參數SaveH(...,OutType * Out)並在傳遞所有內容之前在C++代碼中分配該值是很好的。 這是正常的嗎?在C庫中使用C++代碼分配的指針有問題嗎? 謝謝在C++中使用從C庫返回的指針
3
A
回答
7
您正在傳遞指針的副本,這就是爲什麼在您的C++代碼中看不到C庫中的更改。
由於您已經在修改庫,因此您應該讓該C函數將指針指向指針。
LName(....., OutType** Out)
*Out=SaveH(...);
現在您將傳遞C++指針的地址,因此您的C代碼將修改相同的原始指針。
2
如果你有一個函數:
void Foo(int * p) {
p = malloc(sizeof(int));
}
然後當你怎麼稱呼它:
int * x;
Foo(x);
x的值將保持不變,因爲該指針的副本拍攝。你需要一個指針的指針:
void Foo(int ** p) {
*p = malloc(sizeof(int));
}
則:
int * x;
Foo(& x);
如果這不是你的問題,發佈一些實際的代碼,說明你是問什麼。
相關問題
- 1. 使用SWIG從C++返回指向C#的指針
- 2. 返回指針C
- 3. C++返回指針
- 4. 從C++中的int指針返回一個只讀指針
- 5. 返回void的C++/C函數指針*
- 6. C++:返回子類指針
- 7. 函數返回指針C
- 8. 返回C++指針到perl
- 9. 函數返回指針C
- 10. 如何在C中返回指針?
- 11. 函數返回指針:在C++中
- 12. 在C++中返回一個指針
- 13. C++從函數返回指針
- 14. C++:如何從函數返回指針指向指針?
- 15. 從C++調用的C++函數指針返回字符串#
- 16. 上指針的矢量返回指針從C++ DLL到Python
- 17. C++返回指向類的指針
- 18. C#使用指針等C庫
- 19. 目標C中的指針返回函數的指針
- 20. 從C函數返回的指針數組的C++包裝器
- 21. 返回一個指針或用C
- 22. 功能在C返回指針
- 23. 在C中使用指針#
- 24. 在C中使用指針
- 25. 包裹C++在C#中的函數,返回指針
- 26. 在C++中使用公共函數返回類指針
- 27. 如何使用指針從函數返回多個值C
- 28. 在解引用C++中的指針前遞增函數返回的指針
- 29. C++函數指針的返回類型
- 30. 錯誤的返回指針C++