में पॉइंटर्स के साथ int मैट्रिक्स मुझे मेमोरी लीक बनाने के बिना इंट मैट्रिक्स बनाने के साथ कुछ समस्याएं आ रही हैं। मैं read_matrix() के माध्यम से किसी भी आकार में गतिशील (वैश्विक) मैट्रिक्स बनाने में सक्षम होना चाहता हूं। लेकिन फिर मैं बाद में स्मृति को मुक्त करने में सक्षम होना चाहता हूं। तो मेरी मुख्य विधि में दूसरे printf को बस त्रुटि में परिणाम होना चाहिए क्योंकि इसमें इसे आवंटित कोई स्मृति नहीं होनी चाहिए। मैं इसे बनाने के बारे में कैसे जाऊं?सी-मेमोरी आवंटन भ्रम
int** first_matrix;
int** second_matrix;
int** result_matrix;
int** read_matrix(int size_x, int size_y)
{
int** matrix;
matrix = calloc(size_x, sizeof(int*));
for(int i = 0;i<size_x;i++) {
matrix[i] = calloc(size_y, sizeof(int));
}
for(int i = 0;i<size_x;i++) {
for(int j = 0;j<size_y;j++) {
matrix[i][j] = i*10+j;
}
}
return matrix;
}
int main(int stackc, char** stack)
{
first_matrix = read_matrix(10,10);
printf("9:3 %d - 4:6 %d \n", first_matrix[9][3], first_matrix[4][6]);
free(*first_matrix);
free(first_matrix);
printf("9:3 %d - 4:6 %d \n", first_matrix[9][3], first_matrix[4][6]);
}
ऐसा लगता है कि मैट्रिक्स तक लूपिंग [i]! = NULL काम करता है भले ही मैं अंतिम सूचक को न्यूल पर सेट न करूं, क्या यह संयोग/कुछ और बुरा है? – Fredrik
यदि आप एक अतिरिक्त पॉइंटर आवंटित करते हैं और इसे सेट नहीं करते हैं, तो यह ओएस के आधार पर * डिफ़ॉल्ट * डिफ़ॉल्ट हो सकता है (विंडोज़ शून्य आवंटित स्मृति, यूनिक्स नहीं करता है)। यदि ऐसा नहीं है, तो आप आवंटित सरणी के अंत को बंद कर देंगे और जब तक आप एक पूर्ण सूचक या (अधिक संभावना) क्रैश को मारने के लिए चीजें मुक्त नहीं करते हैं। –
कॉलोक हमेशा स्मृति को शून्य पर सेट करता है। – quinmars