私はC言語で開発されたライブラリ(特にHTK)を使用しています。私はソースを少し修正し、関数からポインタ(リンクされたリストの先頭まで)を取得しようとしました。 あまり詳しく説明しません。 OutTypeという名前の構造体があるとします。私のC++コードでは、次のように宣言します。 OutType * Out; LName(.....、OutType * Out) ここで、Cライブラリでは、LNameはパラメータOutを取り、Outが戻り値であるSaveHという関数を呼び出します(Out = SaveH (...))とSaveHで、OutはmallocされますOutType returnOut =(OutType *)malloc(1、sizeof(OutType)); 私が見る限り、Outは完全にmallocされています.LName関数では、割り当てられたメモリ領域のアドレスを取得できます。しかし、私がC++コードに戻り、LNameを呼び出してOutをパラメータとして渡すと、そのパラメータは常にアドレスとして0を持ちます。 同じものをそのまま残して、Outだけが返り値ではなく、SaveH(....、OutType * Out)というパラメータをすべて渡す前にC++コードでその値を割り当てるようにSaveHを変更します。 それは正常ですか? 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. C++の関数からポインタを返す
- 2. 関数ポインタがCライブラリに渡されるためのリンケージ
- 3. c/C++で書かれた共有ライブラリを使用したLinux Cプログラム
- 4. Swiftで使用されたObj-Cライブラリでカテゴリを使用する際のエラー
- 5. C#アプリケーションからC++ライブラリを使用する場合のマーシャリングエラー
- 6. CからのCTypesポインタの返却
- 7. Cでは、配列ポインタかポインタとして使用されていますか?
- 8. C:関数から返された後、mallocされたポインタが場所を変更しますか?
- 9. iPhoneからGoogle+を使用するためのObjective-Cライブラリ
- 10. C++ 11を使用するライブラリでC++ 14を使用できますか?
- 11. C#.NETでCOMオブジェクトを使用するとC#.NETでオブジェクトが返される
- 12. C++の新しいチェックでポインタが返される
- 13. Cで開発されたCOMから配列を返す
- 14. 動的ライブラリをhaskellでビルドし、C++から使用する
- 15. XCode + Objective-CでCで書かれたライブラリをリンクする
- 16. ポインタC/C++を使ったインデックス作成
- 17. Cで固定ポインタを返す
- 18. C#でCの配列とポインタを使用するDLL
- 19. C#でライブラリを使用する
- 20. 静的CライブラリのポインタにC#配列をマーシャリングする
- 21. GUIDのCOM SAFEARRAYがC++からC#に返される
- 22. バイナリからアイコンを抽出するためのC/C++ライブラリ
- 23. Objective-Cのポインタの使用
- 24. Objective Cのポインタの使用
- 25. C#の構造体ポインタと同じアドレスが返される
- 26. Cの関数からポインタを返すには?
- 27. C++のポインタ関数から多次元配列を返す - CLI
- 28. Objective-c:メソッドから自動解放されたオブジェクトを返す
- 29. iphoneプロジェクトでC++で書かれたライブラリを使用できますか?
- 30. セットアップCで使用するClearCanvasライブラリ