Я хочу получить некоторую строку из библиотеки C/С++ с ctypes в python. Мой код выглядит следующим образом:
Код в lib:
const char* get(struct something *x)
{
[...]
// buf is a stringstream
return strdup(buf.str().c_str());
}
void freeme(char *ptr)
{
free(ptr);
}
Код Python:
fillprototype(lib.get, c_char_p, POINTER(some_model)])
fillprototype(lib.freeme, None, [c_char_p])
// what i want to do here: get a string into python so that i can work
// with it and release the memory in the lib.
c_str = lib.get(some_model)
y = ''.join(c_str)
lib.freeme(c_str)
Если я print() c_str, все есть. Проблема заключается в (или, кажется,) в последней строке Python. Я не могу освободить память - библиотека получает неправильный указатель. Что я здесь делаю неправильно? (И, пожалуйста, не предлагайте boost:: python или так).
*** glibc detected *** python2: munmap_chunk(): invalid pointer: 0x00000000026443fc ***