c - Pointer Dereferencing = Program Crash -
अहस्ताक्षरित int * pmessageLength, MessageLength; Char * pszParsePos; ... // डेटा में pszParsePos ... printf ("\ n संदेश की लंबाई \ nb1:% d \ nb2:% d \ nb3:% d \ nb4:% d \ n", pszParsePos [1], pszParsePos [2] , pszParsePos [3], pszParsePos [4]); PmessageLength = (अहस्ताक्षरित int *) और pszParsePos [1]; MessageLength = * ((अहस्ताक्षरित int *) और pszParsePos [1]); // प्रोग्राम समाप्त होता है
आउटपुट:
संदेश की लंबाई बी 1: 0 बी 2: 0 बी 3: 0 बी 4: 1 प्री>टी क्यों यह मेरे कार्यक्रम दुर्घटनाग्रस्त है समझ में नहीं आता क्या कोई इसे समझा सकता है, या कम से कम एक वैकल्पिक पद्धति का सुझाव दे सकता है जो क्रैश नहीं करेगा?
आपके समय के लिए धन्यवाद!
बस त्रुटि का अर्थ है कि आप गलत संरेखण के साथ डेटा तक पहुंचने का प्रयास कर रहे हैं। विशेष रूप से, ऐसा प्रतीत होता है कि प्रोसेसर को int
को कहीं और की तुलना में अधिक सख्ती से संरेखित करने की आवश्यकता होती है, और अगर आपका * pszParsePos
गठबंधन किया जाता है, तो एक int सीमा (जो कि आप इसे कैसे प्रारंभ करते हैं, पर ऐसा होता है, उदाहरण के लिए, यदि आप
malloc
का उपयोग करते हैं, तो यह निश्चित है कि & pszParsePos [1]
नहीं है
इसे ठीक करने का एक तरीका स्पष्ट रूप से MessageLength
का निर्माण होगा, अर्थात,
MessageLength = (pszParsePos [1] & lt; & lt; 24) | (PszParsePos [2] & lt; & lt; 16) | (PszParsePos [3] & lt; & lt; 8) | PszParsePos [4]
(या अन्य तरीकों के आसपास अगर यह थोड़ा-अंत तक होना चाहिए)। यदि आप वास्तव में टाइप करना चाहते हैं, तो सुनिश्चित करें कि आप तक पहुंचने वाले सूचक ठीक तरह से गठबंधन कर रहे हैं।
Comments
Post a Comment