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

Popular posts from this blog

MySql variables and php -

url rewriting - How to implement the returnurl like SO in PHP? -

Which Python client library should I use for CouchdB? -