2010-06-12 13 views
5

मैं सी से एक वाला समारोह कॉल करने के लिए जा रहा हूँ, और मैं स्मृति प्रबंधन के बारे में एक प्रश्न है। समारोह वाला में इस तरह दिखता है:वाला स्मृति प्रबंधन

int[] GetNumbers(); 

और इस

gint* GetNumbers(int* result_length1); 

तरह सेल्सियस तक valac द्वारा अनुवाद किया है इसके बाद के संस्करण समारोह सी से बुलाया जाता है, फोन करने वाले gint* सरणी को मुक्त कराने के लिए जिम्मेदार है ?

उत्तर

6

एक वाला सवाल! कितना ठंडा है!

वाला एक उपयोगी -C विकल्प है कि आप सी-कोड उत्पन्न पर एक नज़र लेने के लिए अनुमति देता है। इस समारोह, उदाहरण के लिए ...

int[] GetNumbers() { 
    return new int[] {1,2,3}; 
} 

... जब साथ संकलित ...

valac -C -c test.vala 

... निम्नलिखित सी-कोड दिखाई देगा (test.c में) ...

gint* GetNumbers (int* result_length1) { 
    gint* result = NULL; 
    gint* _tmp0_ = NULL; 
    gint* _tmp1_; 
    result = (_tmp1_ = (_tmp0_ = g_new0 (gint, 3), _tmp0_[0] = 1, _tmp0_[1] = 2, _tmp0_[2] = 3, _tmp0_), *result_length1 = 3, _tmp1_); 
    return result; 
} 

नोट g_new0; तो हाँ, आप इसे g_free करना चाहते हैं।

भले ही आप हेडर फ़ाइल से जा रहे हों, और हर कार्यान्वयन को देखने के लिए परेशान नहीं किया जा सकता है, ऐसा लगता है कि समान नियम सी में लागू होते हैं: यदि यह const नहीं है, तो इसे मुक्त करें।

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