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

C++ 在C+;中使用从C库返回的指针+;,c++,C++,我正在使用一个用C语言开发的库(特别是:HTK)。我对源代码做了一些修改,并试图从函数中获取指针(指向链接列表的开头)。 不要太详细;假设我有一个名为OutType的结构。在我的C++代码中,我声明: OutType*Out;并将其传递给某个函数LName(…,OutType*Out) 现在,在C库中,LName取出参数Out,并调用名为SaveH的函数,其中Out是返回值(Out=SaveH(…)),在SaveH中,Out被malloc设置为OutType returnOut=(OutType

我正在使用一个用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++代码时,我把LNEY调用并传递为参数,该参数总是有0作为地址。 如果我把所有的东西都放在一起,但是只需改变SaveH,这样就不会返回值,而是一个参数,如<强> SaveH(…,OutType * out),并且在传递所有东西之前,C++代码中的值是很好的。 这正常吗?C库中使用的指针是否存在C++代码中的问题?
谢谢

你正在传递指针的副本,这就是为什么C库中的更改在C++代码中没有看到的。 因为您已经在修改库,所以应该让C函数将一个指针指向一个指针

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

*Out=SaveH(...);

现在你将通过C++指针的地址,所以你的C代码将修改同一个原始指针。 如果您有一个函数:

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 );