2015-06-24 6 views
5

मैं एक सी फ़ंक्शन को कॉल करने के लिए स्विफ्ट कंपाइलर की ब्रिजिंग हैडर सुविधा का उपयोग कर रहा हूं जो malloc() का उपयोग करके स्मृति आवंटित करता है। फिर यह उस स्मृति में एक सूचक देता है।स्विफ्ट में मुफ्त सी-मॉलोक() 'डी मेमोरी?

char *the_function(const char *); 

स्विफ्ट में, मैं इसे इस तरह का उपयोग करें:: समारोह प्रोटोटाइप की तरह कुछ है

var ret = the_function(("something" as NSString).UTF8String) 

let val = String.fromCString(ret)! 

स्विफ्ट लेकिन आम तौर पर सी में के विषय में मेरी अज्ञानता माफ कर दो, अगर the_function() malloc'ing है स्मृति और इसे वापस कर रहा है, किसी और को इसे किसी भी समय मुक्त करने की जरूरत है।

क्या इसे स्विफ्ट द्वारा किसी तरह से संभाला जा रहा है या क्या मैं इस उदाहरण में स्मृति को लीक कर रहा हूं?

अग्रिम धन्यवाद।

उत्तर

5

स्विफ्ट स्मृति कि malloc() साथ आवंटित किया जाता है प्रबंधित नहीं करता है, तो आप अंत में स्मृति मुक्त करने के लिए है:

let ret = the_function("something") // returns pointer to malloc'ed memory 
let str = String.fromCString(ret)! // creates Swift String by *copying* the data 
free(ret) // releases the memory 

println(str) // `str` is still valid (managed by Swift) 

ध्यान दें कि एक स्विफ्ट String स्वचालित रूप से पारित कर दिया एक UTF-8 स्ट्रिंग में बदल जाती है String value to UnsafePointer<UInt8> function parameter behavior में वर्णित एक सी फ़ंक्शन में const char * पैरामीटर लेना। यही कारण है कि

let ret = the_function(("something" as NSString).UTF8String) 

let ret = the_function("something") 
+0

भावना बनाता करने के लिए सरल किया जा सकता है, धन्यवाद! – Christopher

संबंधित मुद्दे