मैं सी/सी ++ लाइब्रेरी से कुछ स्ट्रिंग प्राप्त करना चाहता हूं जिसमें पाइथन में ctypes हैं। मेरे कोड इस तरह दिखता है: lib मेंपायथन ctypes: स्मृति मुक्त करने के लिए कैसे? अमान्य सूचक त्रुटि प्राप्त करना
कोड:
const char* get(struct something *x)
{
[...]
// buf is a stringstream
return strdup(buf.str().c_str());
}
void freeme(char *ptr)
{
free(ptr);
}
अजगर कोड:
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)
तो मैं प्रिंट() c_str, सब कुछ नहीं है। अंतिम पायथन लाइन में समस्या (या प्रतीत होती है) है। मैं स्मृति मुक्त नहीं कर सकता - पुस्तकालय को गलत सूचक मिल रहा है। मैं यहाँ क्या गलत कर रहा हूँ? (और कृपया बूस्ट :: पायथन या तो सुझाव न दें)।
*** glibc detected *** python2: munmap_chunk(): invalid pointer: 0x00000000026443fc ***
क्यों 'get' एक' स्थिरांक चार * 'लेकिन' freeme' उम्मीद 'चार *' वापसी करता है? क्या आप अपने कॉलर्स को दूर करने की उम्मीद कर रहे हैं? –
अच्छा बिंदु .. दुर्भाग्य से समस्या को हल नहीं किया। –
क्या यह 32-बिट या 64-बिट कोड है? और क्या आप जानते हैं कि कोड की किस पंक्ति में त्रुटि आई है? यह अनिवार्य रूप से 'मुक्त (पीआरटी) 'नहीं है। –