अंदर काम करता है यह प्रश्न इस पूछे जाने वाले प्रश्न के लिए एक विहित डुप्लीकेट के रूप में इस्तेमाल किया जा करने के लिए है:गतिशील स्मृति पहुँच केवल समारोह
मैं एक समारोह के अंदर गतिशील डेटा का आवंटन कर रहा हूँ और सब कुछ अच्छी तरह से काम करता है, लेकिन केवल समारोह जहां आवंटन के अंदर जगह लेता है। जब मैं फ़ंक्शन के बाहर एक ही डेटा का उपयोग करने का प्रयास करता हूं, तो मुझे क्रैश या अन्य अप्रत्याशित प्रोग्राम व्यवहार मिलता है।
यहाँ एक MCVE:
#include <stdlib.h>
#include <stdio.h>
void print_array (int* data, int size)
{
for(int i=0; i<size; i++)
{
printf("%d ", data[i]);
}
printf("\n");
}
void create_array (int* data, int size)
{
data = malloc(sizeof(*data) * size);
for(int i=0; i<size; i++)
{
data[i] = i;
}
print_array(data, size);
}
int main (void)
{
int* data;
const int size = 5;
create_array(data, size);
print_array(data, size); // crash here
}
जब भी print_array
create_array
समारोह अंदर से कहा जाता है, मैं उम्मीद उत्पादन 0 1 2 3 4
मिलता है, लेकिन जब मैं main
से यह कहते हैं, मैं एक कार्यक्रम दुर्घटना मिलता है।
इसका कारण क्या है?
मैंने आपको इतनी बेवकूफ गलती करने के लिए लगभग नीचे गिरा दिया :) –
@ जीन-फ्रैंकोइसफैबर दुर्भाग्य से मुझे प्रश्न को समुदाय विकी बनाने का कोई तरीका नहीं मिला है, केवल जवाब। मैंने mods poked है, तो उम्मीद है कि यह जल्द ही समुदाय विकी में परिवर्तित हो जाएगा। – Lundin
मुझे लगता है कि प्रलेखन बीटा पर बेहतर होस्ट किया जा सकता है। – LPs