c++ - 在 C++ 中使用从 C 库返回的指针

标签 c++

我正在使用用 C 开发的库(特别是:HTK)。我对源代码做了一些修改,并试图从一个函数中获取一个指针(指向链表的开头)。 不要讲太多细节;假设我有一个名为 OutType 的结构。在我的 C++ 代码中,我声明: OutType* 输出;并将其传递给某个函数 LName(....., OutType* Out) 现在,在 C 库中,LName 接受参数 Out,并调用名为 SaveH 的函数,其中 Out 是返回值 (Out=SaveH(...)),在 SaveH 中,Out 是 malloc'ed作为 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 库中的更改。

因为您已经在修改库,所以您应该让该 C 函数接受一个指向一个指针的指针。

LName(....., OutType** Out)

*Out=SaveH(...);

现在您将传递 C++ 指针的地址,因此您的 C 代码将修改相同的原始指针。

关于c++ - 在 C++ 中使用从 C 库返回的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/933003/

相关文章:

c++ - "nullptr"和 "NULL"的用例是什么以及区别

c++ - 如何消除此枚举到字符串映射代码的样板?

c++ - 当第一个 vector 重新分配时,另一个 vector 中的 std::vectors 会重新分配吗?

c++ - 如果目录不为空,则RemoveDirectory()?

c++ - 在不同地址创建一个类的新实例

c++ - 编译 Twilio C++ 库时遇到问题

c++ - C++ 中的标量类型附加

c++ - 为什么要对地址运算符和引用声明符共享与符号 (&)?

C++ + OpenCV = 访问冲突读取位置 0x02176000

c++ - reference_wrapper 引用原语