如何为CFFI结构分配和解除分配内存

时间:2016-04-13 13:32:10

标签: c++ python-2.7 python-cffi

我在C ++中有如下结构

typedef struct user
{
    unsigned long           id;
    char                   *name;
    struct1                 type;
    int                     Period;
    char                   *altername;
    char                   *description;
    struct2                 state;
    struct3                *userDetails;
} CUser;

typedef struct _CDeltaUser
{
    CUser                  *deltaUser;
    struct3                *deletedUserDetails;
    struct3                *changedUserValues;
} CDeltaUser;

我正在尝试通过CFFI为此结构创建一个对象,并为成员分配值,并将创建的对象传递给C ++中的API。

deltaUser = ffi.new("CDeltaUser*")

deltaUser.deltaUser = ffi.new("CUser*") 

deltaUser.deltaUser.id=4

现在,当我尝试通过使用ffi.dlopen ApiName(par1,par2,deltaUser,par4)加载的dll将此deltaUser传递给C ++中的API时,此时python崩溃了。在Windows和Linux中都会发生崩溃。

这段代码有什么问题?我使用的是python2.7和cffi 1.5.2

回溯上的

提供以下日志。发现价值已经优化

在ffi_call(cif = 0x7ffff1189260,fn = 0x7ffff0488faa,rvalue = 0x7ffff118e098,avalue = 0x7ffff118e078)src / x86 / ffi64.c:484 in cdata_call(cd = 0x7ffff118c0d0,args = 0x7ffff7ee4310,kwds =)at c / _cffi_backend .c:2637 in PyObject_Call(func = 0x7ffff118c0d0,arg =,kw =)at Objects / abstract.c:2529 in do_call(f =,throwflag =)at Python / ceval.c:4239 call_function(f =,throwflag =)在Python / ceval.c:4044

提前致谢。

0 个答案:

没有答案