2015-07-25 9 views
5

एक सी/सी ++ लाइब्रेरी के साथ एकीकृत करते समय आईओएस में अजीब व्यवहार।आईओएस मूल पुस्तकालय में आवंटित स्मृति को हटा देता है

AppDelegate में मैं

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0), ^{ 
    [[ABCService sharedInstance] abcInitialize]; 
}); 

abcInitialize फोन ग में परिभाषित किया गया है ++ पुस्तकालय

struct abc *top; 
top = calloc(TYPE_SERV,size_of(struct abc)); 
top->us = server_alloc (...certain_params...); 

सर्वर alloc अंदर मैं संरचनाओं struct1 और struct2 और फिर प्रारंभ समारोह मैं में की alloc करना

तक पहुंचने का प्रयास करें 210

मैंने देखा है कि मेरी struct1 हमेशा रिक्त है

जब मैं डिबग, मैं देख सकता हूँ कि संरचना ठीक आवंटित किया गया था और मूल्यों उचित रूप में निर्धारित हैं, लेकिन समारोह से लौटने से पहले, स्मृति स्वचालित रूप से पुनः आवंटित की जाती है। यह पूरी तरह भ्रमित और परेशान है। क्या कोई मुझे यह समझने में मदद कर सकता है कि क्या हो रहा है?

मैं बंद एआरसी भी मोड़, अभी भी कोई बदलाव नहीं आया द्वारा की कोशिश की

+0

आपको यह दिखाने की ज़रूरत है कि struct1 कैसे आवंटित किया जाता है और यह कैसे घोषित किया जाता है। – bbum

+0

स्टक्ट 1 को कॉलोक (1, स्टक्ट 1_ आकार) के रूप में आवंटित किया जा रहा है; – blganesh101

+0

मुझे लगता है कि आपको यह दिखाने की ज़रूरत है कि कैसे abc आरंभ करें: ऐसा लगता है। क्योंकि आपके वर्तमान कोड में आप 'शीर्ष' सूचक के लिए स्मृति आवंटित नहीं करते हैं लेकिन 'us' सदस्य (शीर्ष-> us = ...) को कुछ असाइन करते हैं। –

उत्तर

7
top->us = calloc(TYPE_US, size_of(struct us)); 
if(top->us->struct1) //do something 

मैंने देखा है कि मेरी struct1 है कि आपके वास्तविक कोड हाँ है, तो हमेशा अशक्त

है, struct1 हमेशा शून्य हो जाएगा। calloc स्मृति आवंटित करता है और इसे शून्य पर प्रारंभ करता है। इसलिए, के सदस्यों के सभी शून्य होंगे, और struct1top->us का सदस्य है, यह शून्य होने वाला है, यानी NULL

+0

संरचना 1 आवंटित किया गया है। यह असली कोड नहीं है। असली कोड सभी प्लेटफार्मों पर काम करता है और आईओएस – blganesh101

4

सबसे पहले, एआरसी के पास सी या सी ++ कोड के मेमोरी प्रबंधन से कोई लेना देना नहीं है, इसलिए, आप इसे उत्पन्न करने के लिए एआरसी को रद्द कर सकते हैं।

http://www.cplusplus.com/reference/cstdlib/calloc/ के अनुसार, कॉलोक हमेशा आवंटित स्मृति के सभी बिट्स को 0 पर प्रारंभ करता है, स्वाभाविक रूप से, शीर्ष-> us-> struct1 पूर्ण होगा।

लेकिन समारोह से लौटने से पहले, स्मृति स्वचालित रूप से

कैसे आप के निष्कर्ष पर पहुंचा है कि स्मृति स्वचालित रूप से पुनः आवंटित की जाती है पुनः आवंटित की जाती है? जैसा ऊपर बताया गया है, एआरसी स्वचालित रूप से आपकी सी ++ संरचना/वस्तु को जारी नहीं करेगा।

एक निष्कर्ष के रूप में। परिणाम जो आपने देखा वह वास्तव में अपेक्षित था।

+0

के लिए कोई बदलाव नहीं किया गया है, जब मैं डीबग किया जाता हूं, तो स्मृति को आवंटित किया जाता है और मैं संरचना मानों को बरकरार रख सकता हूं। फ़ंक्शन पर वापस उसी संरचना को डी-आवंटित किया जाता है। मैं सोच रहा हूं कि यह अजीब व्यवहार क्यों है। – blganesh101

0

मुझे समस्या मिली और यह एक ही फाइल को अलग-अलग लाइब्रेरी से दो बार जोड़ने के कारण था। मैंने अपने पुस्तकालयों को सही किया है और उसने मेरी समस्या तय की है। तो कोई स्रोत कोड अपडेट नहीं किया गया था। सिर्फ libs सही स्रोतों के साथ सही किया गया था। धन्यवाद आपके समर्थन के लिए बहुत कुछ।

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