pointers - Printf seems to mess the output of a simple C program -


मेरे पास अंश जोड़ने के लिए कुछ कोड है।

  #include & lt; stdio.h & gt; # शामिल करें & lt; stdlib.h & gt; Struct frac {int enumerator; इंट बेगुआ; }; Typedef struct frac frac_t; Frac_t * जोड़ें (frac_t * b1, frac_t * b2) {frac_t rfrac; Frac_t * p; पी = & amp; आरएफआरसी; (* P) ​​.numerator = ((* b1) .numerator * (* b2) .denominator) + ((* b2) .numerator * (* b1) .dinominator); (* पी) .डिनाइमेटर = ((* बी 1)। डिज़ाइनमैनेटर * (* बी 2) .डिनाइमेटर); वापसी पी; } Int main (शून्य) {frac_t b1 = {2,4}; Frac_t बी 2 = {1,7}; Frac_t * जोड़ = जोड़ें (और बी 1, और बी 2); प्रिंटफ़ ("% i% i \ n", ऐड- & gt; एन्यूमरेटर, ऐड- & gt; छोर); प्रणाली ( "थामने"); वापसी 0; }  

यह बिल्कुल ठीक काम करता है। इसका परिणाम है: 3 5, जैसा कि माना जाता है।

यदि मैं एक "प्रिंटफ़" जोड़ता हूं तो यह पूरी तरह से मेरे परिणाम को खराब करता है:

  int main (शून्य) {Frac_t बी 1 = {2,4}; Frac_t बी 2 = {1,7}; Frac_t * जोड़ = जोड़ें (और बी 1, और बी 2); printf ( "इसके अलावा: \ n"); प्रिंटफ़ ("% i% i \ n", ऐड- & gt; एन्यूमरेटर, ऐड- & gt; छोर); प्रणाली ( "थामने"); वापसी 0; }  

इसका परिणाम है:

इसके अलावा:

2008958704 -1

क्या गलत हो गया?

आपका फ़ंक्शन जोड़ें उस फ़ंक्शन के भीतर बनाए गए एक अस्थायी चर में एक संकेतक लौट रहा है। एक बार वह समारोह वापस आ गया है, कार्यक्रम उस स्मृति को किसी भी तरह से इच्छाओं का उपयोग कर सकता है; आपको इसे अब तक नहीं पहुंचाना चाहिए आपको पहली बार भाग्यशाली मिला - कार्यक्रम को अकेले स्मृति के उस क्षेत्र को छोड़ने के लिए हुआ, और आपका परिणाम संरक्षित था। दूसरे प्रिंटफ़ में जोड़ने से स्टैक मेमोरी में अतिरिक्त संशोधन हो गए, और यह आपके मूल मानों को ओवरराइट और बग का पर्दाफाश किया।

आपको frac_t < कोड> फ़ंक्शन जोड़ें के बजाय अपना परिणाम प्राप्त करने के लिए उदा।:

  शून्य जोड़ें (frac_t * परिणाम, frac_t * b1, frac_t * b2) {// संशोधित परिणाम यहाँ}  

Comments

Popular posts from this blog

c# - How to capture HTTP packet with SharpPcap -

php - Multiple Select with Explode: only returns the word "Array" -

php - jQuery AJAX Post not working -