В моем коде C у меня есть следующая структура:
typedef struct my_structure{
char* str1;
char* str2;
}MyStruct;
И функция, которая возвращает указатель MyStruct:
MyStruct* foo();
Внутри foo я выделил память для MyStruct, str1 и str2 следующим образом:
MyStruct* obj = malloc(sizeof(MyStruct));
obj.str1 = malloc(256);
obj.str2 = malloc(256);
Я хочу вызвать foo из python, java, C # и PHP и не хочу, чтобы в этом процессе возникала утечка памяти.
Я не уверен, что пишу:
%newobject foo;
MyStruct* foo();
гарантирует, что сборщик мусора освободит память как для структуры, так и для строк внутри нее.
Я не хотел обязывать вызывающую сторону явно освобождать память для str1 и str2, так как я искал автоматический способ освобождения памяти. Это возможно?
Нужно ли в этом случае использовать newfree typemap?
Я был бы очень признателен, если бы вы предоставили мне пример, показывающий лучший способ сделать это.
Спасибо!