Ich möchte eine Zeichenfolge aus einer C/C++ - Bibliothek mit Ctypes in Python erhalten. Mein Code sieht wie folgt aus:Python Ctypes: Wie Speicher frei? Erhalten ungültiger Zeiger Fehler
-Code in lib:
const char* get(struct something *x)
{
[...]
// buf is a stringstream
return strdup(buf.str().c_str());
}
void freeme(char *ptr)
{
free(ptr);
}
Python-Code:
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)
Wenn i print() c_str, alles da ist. Problem ist (oder scheint) in der letzten Python-Zeile. Ich kann den Speicher nicht freigeben - die Bibliothek bekommt einen falschen Zeiger. Was mache ich hier falsch? (Und bitte nicht boost :: python oder so vorschlagen).
*** glibc detected *** python2: munmap_chunk(): invalid pointer: 0x00000000026443fc ***
Warum gibt 'get' ein' const char * 'zurück, aber' freeme' erwartet 'char *'? Erwarten Sie, dass Ihre Anrufer const wegwerfen? –
guter punkt .. leider hat das das problem nicht gelöst. –
Ist das 32-Bit- oder 64-Bit-Code? Und wissen Sie, in welcher Codezeile der Fehler aufgetreten ist? Es ist nicht unbedingt das 'free (ptr)'. –