c - How to Use LLIST *mylist[N]; -
मुझे यह मिलता है:
लिस्ट * मेरीलिस्ट [एन];
जहां एन इनपुट फ़ाइल की पंक्तियों की संख्या है। फिर mylist [i]
I लिंक्ड सूची में एक सूचक है।
मैं एक फ़ंक्शन कॉल करता हूँ
LLIST * list_add (LLIST ** p , Int i) {LLIST * n; N = (LLIST *) मॉलोक (आकारफ (एलआईएलआईएसटी)); अगर (n == नल) वापसी नल; N- & gt; अगले = * p; / * पिछले तत्व (* p) अब "अगला" तत्व बन जाता है * / * p = n; / * सूची के सामने (हेड) में नए खाली तत्व जोड़ें * / n- & gt; डेटा = i; वापसी पी; }
तो मेरे मुख्य में मैं कुछ ऐसा कहता हूं
लिस्ट * मेरीलिस्ट [एन]; list_add (& amp; MyList [0], 1); list_add (& amp; MyList [0], 2); List_add (& mylist [1], 3) list_add (और मेरीलिस्ट [1], 4); list_print (MyList [0]); // मेरीलिस्ट प्रिंट करें [0] सूची_प्रिंट (मेरीलिस्ट [1]); // प्रिंट मेरीलिस्ट [1]
मेरा प्रिंट_सूची कार्य है:
शून्य * list_print (लिस्ट * n) {if (n == NULL) { Printf ("सूची खाली है \ n"); } जबकि (n! = NULL) {printf ("% d", n- & gt; डेटा); N = n- & gt; अगला; }}
जब मैं list_print (mylist [0])
करता हूं, तो यह 2 1
प्रिंट करता है।
जब मैं list_print (mylist [1]) करता हूँ
, मुझे एक विभाजन त्रुटि मिलती है।
क्या चल रहा है?
आपको mylist
सरणी की सामग्री को इनिशियलाइज़ नहीं करना प्रतीत होता है, और इसमें उसमें शामिल हो सकते हैं जो यादृच्छिक स्मृति स्थानों पर इंगित करते हैं। सिर्फ नए तत्व जोड़ते समय यह कोई फर्क नहीं पड़ता, शुरुआत में नए तत्व डाले जाते हैं, अमान्य संकेतों तक पहुंचने में कभी नहीं। लेकिन जब आप सूची मुद्रित करने का प्रयास करते हैं, तो प्रिंट फ़ंक्शन सूची के अंत में अमान्य सूचक का पालन करेगा और एक सेगमेंटेशन गलती का उत्पादन करेगा।
इससे बचने के लिए सरणी घोषणा करने के लिए एक प्रारंभकर्ता जोड़ें:
<पूर्व> लिस्ट * मेरीलिस्ट [एन] = {NULL};
यह mylist
से NULL
के सभी तत्वों को सेट कर देगा।
Comments
Post a Comment