2009-06-29 15 views
5

मेरे पास कुछ सी कोड है जो एक पहेली है। इस कोड के साथ करने के कारण के लिए, मैं सोच रहा हूं कि मैं कैसे बता सकता हूं कि struct ऑब्जेक्ट ढेर या ढेर पर समाप्त हो रहा है?क्या यह स्टैक या हीप पर है?

वस्तुओं नहींmalloc या calloc के साथ बनाया जा रहा है। वे अपने जीवन को एक सरणी के रूप में शुरू करते हैं। इस पोस्ट के प्रयोजनों के लिए, मैं संरचना एएमपी को कॉल करने जा रहा हूं।

Emp myEmp[6]; 

/* Each myEmp[?] item is populated in code */ 

वस्तुओं छाँटे गए और विभिन्न तरीकों से और कुछ बिंदु पर छेड़छाड़ कर रहे हैं, वस्तुओं की नकल की और फिर एक सरणी-सूचक को सौंप दिया गया है। प्रतिलिपि memcpy के माध्यम से की जाती है। वस्तुओं को तब कुछ में डाल दिया जाता है जैसे: Emp* emps_a[6]

ऑब्जेक्ट्स एक प्रतिलिपि से जाते हैं और उपरोक्त emps_a में असाइन किए जाते हैं।

int i; 
for(i = 0; i < n; i++) 
{ 
    emps_a[i] = myEmpsCopy + i; 
} 

मुझे यकीन नहीं है कि इनमें से कुछ या इनमें से कोई मेरे प्रश्न पर असर डाल रहा है। मुझे कभी भी मुफ्त() की आवश्यकता नहीं है या स्मृति साफ कर रहा है ... मुझे डर है कि मुझे सी

सहायता की बहुत सराहना की गई है।

+3

अंगूठे का नियम: यदि आप मॉलोक कहते हैं, तो आपको नि: शुल्क कॉल करना होगा। उलटा - अगर आपने मॉलोक को फोन नहीं किया है, तो आपको मुफ्त में कॉल नहीं करना चाहिए - आमतौर पर, लेकिन हमेशा नहीं, सच है। (कुछ फ़ंक्शंस आपके लिए मॉलोक को कॉल करेंगे। अगर वे ऐसा करते हैं, तो इसे फ़ंक्शन के दस्तावेज़ में बड़े लाल अक्षरों में लिखा जाना चाहिए।) –

उत्तर

17

वैश्विक चर और चर static संशोधक (जो एक अलग स्मृति क्षेत्र में आवंटित किए जाते हैं) के साथ की घोषणा की एक तरफ, स्थानीय चर एक समारोह शरीर में घोषित ढेर जबकि जो कुछ भी आप के लिए ढेर पर आवंटित किया जाता है malloc फोन पर आवंटित किए जाते हैं छोड़कर। इसके अलावा,के साथ आवंटित सी 99 चर आकार के सरणी और स्मृति ढेर पर समाप्त हो जाएगा।

int* x[10]; // The addresses are held on the stack 
int i;  // On the stack 
for(i = 0; i < 10; ++i) 
    x[i] = malloc(sizeof(int)*10); // Allocates memory on the heap 

उदाहरण के लिए, उपरोक्त कोड में, वहाँ ढेर ढेर में 10 अलग-अलग स्थानों के लिए पतों पकड़े पर int* मूल्यों की एक सरणी है।

+0

... और "स्थैतिक" चर शायद स्मृति के अपने क्षेत्र में हैं। –

+0

हाँ, वैश्विक रूप से घोषित चीजों के साथ। –

+0

तो ऊपर मेरे उदाहरण में आपकी कहानियां, सब कुछ ढेर पर समाप्त होता है। ढेर पर खत्म होने के लिए कुछ भी संभव नहीं है? –

संबंधित मुद्दे