iOS एप्लिकेशन में, मैं एक struct है कि इससंरचना संरेखण से संबंधित EXC_BAD_ACCESS?
typedef struct _Pixel {
signed char r;
signed char g;
signed char b;
} Pixel;
मेरी कोड में की तरह लग रहा है, मैं calloc के साथ इन की एक सरणी का आवंटन:
Pixel* buff = calloc(width * height, sizeof(Pixel));
अब, यह सिम्युलेटर में पूरी तरह से काम करता है , लेकिन डिवाइस पर, यदि मैं buff[width * height - 1]
(यानि buff
में अंतिम तत्व) तक पहुंचने का प्रयास करता हूं, तो मुझे EXC_BAD_ACCESS
मिलता है।
यह मेरे लिए कोई मतलब नहीं था, इसलिए डिबगिंग के कुछ ही घंटों के बाद, मैं अगर यह संरेखण मुद्दा किसी तरह का था सोचा है, तो एक लहर में मैंने कोशिश की:
typedef struct _Pixel {
signed char r;
signed char g;
signed char b;
signed char padding;
} Pixel;
के आकार बनाने पिक्सेल दो की शक्ति।
यह EXC_BAD_ACCESS
को हल करता है, लेकिन यह बहुत अजीब है। क्या किसी को यहां क्या हो रहा है में कोई अंतर्दृष्टि है? क्या मैं सिर्फ संरचना को पैड करके अंतर्निहित समस्या का मुखौटा कर रहा हूं या संरेखण वास्तव में खराब पहुंच का कारण बन सकता है (मैंने सोचा था कि संरेखण केवल प्रदर्शन पर प्रभाव था, सहीता नहीं)।
हे बिल दो चीजें। चूंकि SO मुझे एक चरित्र को संपादित करने नहीं देता है, इसलिए आपको कॉलोक में एक टाइपो मिला है। आप अंत में एक कोष्ठक याद कर रहे हैं। आपकी मुख्य समस्या के लिए, यदि आप या तो कहीं और बफ को फिर से चालू करते हैं, क्या आप पिछले तत्व तक पहुंचने से पहले * buff * पर कुछ और करते हैं? – Lefteris
चौड़ाई और ऊंचाई के अपने मूल्यों की फिर से जांच करें ... !!! –
यह कोड है जो महीनों के लिए काम करता है - केवल अंतर यह है कि मैंने सीजीएफएलएटी से हस्ताक्षरित बाइट्स तक स्ट्रक्चर सदस्यों के प्रकार को बदल दिया। तो चौड़ाई और ऊंचाई समस्या नहीं है - यह संरचना के लेआउट के साथ कुछ करने के लिए है। – Bill