c - segmentation fault while parsing a list of integers -


  पूर्णांक संख्या; चार * पी [20]; चार ताप Int i = 0; Do {p [i] = malloc (sizeof (int)); scanf ( "% s", पी [i]); tempc = * पी [i]; ++ मैं; } जबकि (tempc == 'एक्स'); num_arrays = atoi (पी [0]);  

जब मैं num_arrays = atoi (..) लिखता हूं, जीसीसी मुझे विभाजन त्रुटि या मेमोरी स्टैक को पार कर देता है, मुझे समझ में नहीं आता कि ऐसा क्यों होता है क्या कोई भी समझा सकता है, क्यों?

आपने p में किसी मेमोरी को आवंटित नहीं किया है , इसलिए इसके तत्वों को यादृच्छिक स्थानों पर इंगित किया जाता है। आप अधिकतम 100 की लंबाई के साथ स्ट्रिंग के लिए मेमोरी आवंटित कर सकते हैं:

  int i; के लिए (i = 0; i & lt; 20; i ++) पी [i] = मॉलोक (101);  

या फिर आप वर्ण की एक सरणी चाहते हैं, स्ट्रिंग्स की नहीं, जिस स्थिति में आपको इसे घोषित करना चाहिए

  char पी [20];  

इस मामले में, आप हालांकि scanf हालांकि साथ प्रत्येक तत्व में तार पढ़ने की कोशिश नहीं करनी चाहिए।

आपके स्ट्रिंग्स के लिए मेमोरी की, जो कि सबसे अधिक संभावना है 4, अर्थात आपके कोड को scanf द्वारा पढ़ा जाने वाला स्ट्रिंग 3 वर्णों से अधिक लंबा नहीं होना चाहिए। अन्यथा आपके पास बफर ओवररान त्रुटि है, जिसके कारण आप उस विभाजन की गलती का कारण बन सकते हैं जिसके साथ आप संघर्ष कर रहे हैं।

इसके अलावा, tempc = p [i] एक वर्ण वैरिएबल ! यह मान, एक चरित्र में परिवर्तित हो जाएगा, लगभग निश्चित रूप से 'x' के बराबर नहीं होगा।

मुझे लगता है कि आप p [i ] , जो p [i] [0] या * p [i] होगा।

मुझे यह भी संदेह है कि आपका लूप स्थिति आपके दिमाग के विपरीत है: अभी तक लूप को tempc के बराबर के रूप में दोहराता है 'x' - आप संभवत: दोहराना चाहते थे तक tempc हो जाता है 'x' । और आपको अपने लूप को भी 20 बार से अधिक नहीं चलना चाहिए:

  ...} जबकि (tempc! = 'X' & amp; i & lt; 20);  

Comments