सी या सी ++ स्थानीय वस्तुओं में आमतौर पर ढेर पर आवंटित किया जाता है। आप स्टैक पर एक बड़ी सरणी आवंटित कर रहे हैं, स्टैक से अधिक संभाल सकता है, इसलिए आपको stackoverflow.
इसे स्टैक पर स्थानीय आवंटित न करें, इसके बजाय किसी अन्य स्थान का उपयोग करें। यह ऑब्जेक्ट वैश्विक बनाने या इसे वैश्विक ढेर पर आवंटित करके प्राप्त किया जा सकता है। वैश्विक चर ठीक हैं, अगर आप किसी भी अन्य संकलन इकाई से उपयोग नहीं करते हैं। यह सुनिश्चित करने के लिए कि यह दुर्घटना से नहीं होता है, एक स्थिर भंडारण विनिर्देश जोड़ें, अन्यथा केवल ढेर का उपयोग करें।
यह बीएसएस खंड, जो ढेर का एक हिस्सा है में आवंटित करेगा:
static int c[1000000];
int main()
{
cout << "done\n";
return 0;
}
इस डेटा खंड, जो भी ढेर का एक हिस्सा है में आवंटित करेगा:
int c[1000000] = {};
int main()
{
cout << "done\n";
return 0;
}
इस ढेर में कुछ अनिर्दिष्ट स्थान पर आवंटित करेगा:
int main()
{
int* c = new int[1000000];
cout << "done\n";
return 0;
}
उत्तर के लिए धन्यवाद, लेकिन क्या आप मुझे समझा सकते हैं कि स्टैक पर सरणी आवंटित क्यों की जाती हैं और मुख्य प्रोग्राम मेमोरी में क्यों नहीं। – Mayank
दिया गया कोड स्टैक पर आवंटित करता है क्योंकि इसे संकलन समय पर निरंतर संख्या में तत्वों के साथ एक सरणी के रूप में निर्दिष्ट किया गया है। मान केवल मॉलोक, नए, आदि के साथ हीप पर रखे जाते हैं –
सभी स्वचालित वैरिएबल स्टैक पर आवंटित किए जाते हैं। यदि आप विघटनकारी को देखते हैं तो आपको स्टैक पॉइंटर से घटाए गए आपके स्थानीय चर का आकार दिखाई देगा।जब आप मॉलोक या कॉलोक या किसी मेमोरी फ्यूक्शन को कॉल करते हैं तो फ्यूक्शन जाते हैं और आपके रिक्वेस्ट को संतुष्ट करने के लिए पर्याप्त मेमोरी के ब्लॉक मिलते हैं। – rerun