私はctypesを持つC/C++ライブラリからPythonにいくつかの文字列を取得したいと思います。Python ctypes:メモリを解放する方法は?無効なポインタエラーを取得する
コードlibに:
const char* get(struct something *x)
{
[...]
// buf is a stringstream
return strdup(buf.str().c_str());
}
void freeme(char *ptr)
{
free(ptr);
}
Pythonコード:私のコードは次のようになり、私は()c_strを印刷する場合
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)
、すべてがそこにあります。最後のPythonの行に問題がある(またはそうであると思われる)。私はメモリを解放することはできません - ライブラリが間違ったポインタを取得しています。私はここで間違っていますか? (そしてboost :: pythonなどを提案しないでください)。
*** glibc detected *** python2: munmap_chunk(): invalid pointer: 0x00000000026443fc ***
なぜ 'get'は' const char * 'を返しますが' freeme'は 'char *'を期待していますか?あなたの呼び出し元がconstを投げ捨てることを期待していますか? –
良い点..残念ながら、それは問題を解決しませんでした。 –
この32ビットまたは64ビットのコードですか?エラーが発生したコードの行は何ですか?必ずしも 'free(ptr) 'であるとは限りません。 –