Я имею эту структуру:Free calloc в общей библиотеки, используя ctypes
struct result {
int position;
int *taken;
};
struct result get_result(int pos, int take[]){
struct result res;
res.position = pos;
res.taken = take;
return res;
}
который я называю в функции:
struct result get_taken_values(){
//some code
int position = 0;
int* chosen = calloc(9, sizeof(int));
//some more code
struct result res;
res.position = position;
res.taken = chosen;
return res;
}
Если бы я должен был использовать это в основном, я бы просто позвонить free(res.taken) in the end
,
Но я делаю это в разделяемую библиотеку с помощью:
gcc -fPIC -c get_taken_values.c
ld -shared -soname libtest.so.1 -o my_library.so -lc get_taken_values.o
Я буду использовать эту библиотеку в Python с использованием ctypes.
Нужно ли мне освобождать calloc, если да, то как это сделать?
Поскольку массив является фиксированным размером, почему бы просто не определить 'int take [9]' в структуре? Тогда вам не нужны 'calloc' и' free'. ctypes обрабатывает подклассы 'ctypes.Structure'', установленные в 'restype', но вы также можете выделить структуру в Python и передать ее ссылкой для функции для изменения. – eryksun
вы можете определить функцию 'free_taken_values ()', которая выполняет необходимую очистку. – jfs