के साथ आवंटित सरणी प्रकार और सरणी के बीच अंतर आज मैं कुछ सी कोड के साथ अपने एक दोस्त की मदद कर रहा था, और मुझे कुछ अजीब व्यवहार मिला है कि मैं उसे समझा नहीं सकता था कि यह क्यों हो रहा था। हमारे पास प्रत्येक पंक्ति में int के साथ पूर्णांक की एक सूची के साथ टीएसवी फ़ाइल थी। पहली पंक्ति सूची की लाइनों की संख्या थी।मॉलोक
हमारे पास एक बहुत ही सरल "readfile" के साथ एक सी फ़ाइल भी थी। पहली पंक्ति n को पढ़ रहा था, लाइनों की संख्या है, तो वहाँ के एक प्रारंभ किया गया था:
int list[n]
और अंत में एक एक fscanf के साथ n के पाश के लिए।
छोटे एन (तक ~ 100.000) के लिए, सबकुछ ठीक था। हालांकि, हमने पाया है कि जब एन बड़ा था (10^6), एक segfault होगा।
अंत में, हम सूची प्रारंभ
int *list = malloc(n*sizeof(int))
और सब कुछ करने के लिए जब अच्छी तरह से भी बहुत बड़ी n के साथ बदल गया है,।
क्या कोई यह समझा सकता है कि ऐसा क्यों हुआ? int सूची [n] के साथ segfault का कारण क्या था, जब हम सूची = malloc (n * sizeof (int) का उपयोग शुरू करते हैं तो रोक दिया गया था?
बहुत स्पष्ट जवाब ... धन्यवाद! –
महान जवाब! मैं सोच रहा था कि गति में कोई अंतर है या नहीं? –
संदर्भ के इलाके के प्रभावों के कारण मुझे संदेह होगा कि स्टैक-आवंटित सरणी पहुंचने के लिए तेज़ है, और 'मॉलोक' केवल एक स्टैक पॉइंटर को बंपिंग करने से बहुत धीमी है। लेकिन वास्तव में, काम के लिए जो भी दृष्टिकोण अधिक उपयुक्त है उसका उपयोग करना सबसे अच्छा है। – templatetypedef