शायद यह मंच से मंच तक अलग है, लेकिनmalloc gcc में मानों को 0 में क्यों प्रारंभ करता है?
जब मैं जीसीसी का उपयोग करके संकलित करता हूं और नीचे कोड चलाता हूं, तो मुझे हर बार अपने उबंटू 11.10 में 0 मिलता है।
#include <stdio.h>
#include <stdlib.h>
int main()
{
double *a = (double*) malloc(sizeof(double)*100)
printf("%f", *a);
}
कॉलोक होने के बावजूद मॉलोक ऐसा क्यों व्यवहार करता है?
क्या इसका मतलब यह नहीं है कि मूल्यों को प्रारंभ करने के लिए केवल एक अनचाहे प्रदर्शन ओवरहेड है, भले ही आप इसे कभी-कभी नहीं चाहते हैं?
संपादित करें: ओह, मेरा पिछला उदाहरण initiazling नहीं था, लेकिन "ताजा" ब्लॉक का उपयोग करने के लिए हुआ।
int main()
{
int *a = (int*) malloc(sizeof(int)*200000);
a[10] = 3;
printf("%d", *(a+10));
free(a);
a = (double*) malloc(sizeof(double)*200000);
printf("%d", *(a+10));
}
OUTPUT: 3
0 (initialized)
लेकिन उनका कहना है कि वहाँ एक सुरक्षा कारणों से जब mallocing है उसके लिए धन्यवाद:
क्या मैं ठीक लिए देख रहा था कि ऐसा क्यों यह initializes जब यह एक बड़ी ब्लॉक आवंटित करता था! (इसके बारे में कभी सोचा नहीं)। निश्चित रूप से इसे ताजा ब्लॉक, या बड़े ब्लॉक आवंटित करते समय शून्य पर प्रारंभ करना होगा।
एक और अधिक यथार्थवादी परीक्षण के लिए साथ आउटपुट, आप, आवंटन को मुक्त कराने और उसके बाद फिर आवंटन (संभवतः प्रत्येक कई बार दोहरा) की कोशिश की? सिर्फ इसलिए कि मॉलोक शून्य-प्रारंभिक मेमोरी देता है पहली बार इसका मतलब यह नहीं है कि आप इसे सामान्य रूप से गिन सकते हैं। – user786653
यह भी हो सकता है कि स्मृति ऑपरेटिंग सिस्टम या कुछ द्वारा 0 पर सेट की गई थी और 'malloc' के पास इसके साथ कुछ लेना देना नहीं था। –
[सुरक्षा कारणों से सी में 'malloc' का परिणाम न डालें] (http://stackoverflow.com/q/605845/995714) –