How to use malloc and free with python ctypes?
I have a function in my C library, say runsim() which takes pointer to
struct repdata as one of the arguments, where struct repdata is given by
struct repdata {
int *var1;
int *var2;
int *var3;
char *var4;
double *var5;
double *var6;
int *var7;
};
When using C exclusively, I initialize a variable of type struct repdata
calling the function,
struct repdata data;
void create_data_container(struct repdata *data, int len_data)
{
data -> var1 = malloc( sizeof(int) * len_data );
data -> var2 = malloc( sizeof(int) * len_data );
data -> var3 = malloc( sizeof(int) * len_data );
data -> var4 = malloc( sizeof(char) * len_data );
data -> var5 = malloc( sizeof(double) * len_data);
data -> var6 = malloc( sizeof(double) * len_data);
data -> var7 = malloc( sizeof(int) * len_data);
}
and then fill this struct as simulation proceeds. After I have written the
data to a file, I free the memory using the standard
free(data.var1);
free(data.var2);
..
..
..
free(data.var7);
I want to call the runsim() function from Python using Python Ctypes. For
this I need to pass a pointer to a variable (that is equivalent to the
type of struct repdata) as one of the runsim() arguments. Suppose that in
Python I have defined an equivalent of struct repdata in the following
manner.
import ctypes as C
class Repdata(C.Structure):
_fields_ = [
("var1", C.POINTER(C.c_int)),
("var2", C.POINTER(C.c_int)),
("var3", C.POINTER(C.c_int)),
("var4", C.POINTER(C.c_char)),
("var5", C.POINTER(C.c_double)),
("var6", C.POINTER(C.c_double)),
("var7", C.POINTER(C.c_int)),
]
What is the equivalent of create_data_container function shown above on
the Python side? I want to initialize an instance of Repdata which can be
passed to C code and has sufficient memory for storing the replication
data. And, once simulation is completed, how do I free the memory from
Python?
I am using Ubuntu Linux 12.04.
Thanks in advance for your help.
No comments:
Post a Comment