में संदर्भ द्वारा उत्तीर्ण करना क्या कोई मुझे समझाने वाला है कि कृपया मुझे बताएं कि निम्न कोड सेगमेंट दोष क्यों है? संदर्भ द्वारा स्मृति आवंटित करने में कोई समस्या नहीं है, लेकिन जैसे ही मैं संदर्भ से कुछ भी मुक्त या मुक्त करने का प्रयास करता हूं, segfault होता है।2 डी गतिशील ऐरे आवंटन और सी
मुझे यकीन है कि मुझे पॉइंटर्स के बारे में कुछ मौलिक अवधारणा याद आ रही है और संदर्भ से गुजर रहा है, उम्मीद है कि कुछ प्रकाश शेड किया जा सकता है।
#include <stdlib.h>
#include <stdio.h>
void allocateMatrix(float ***);
void fillMatrix(float ***);
void freeMatrix(float **);
int main() {
float **matrix;
allocateMatrix(&matrix); // this function calls and returns OK
fillMatrix(&matrix); // this function will segfault
freeMatrix(matrix); // this function will segfault
exit(0);
}
void allocateMatrix(float ***m) {
int i;
m = malloc(2*sizeof(float*));
for (i = 0; i < 2; i++) {
m[i] = malloc(2*sizeof(float));
}
return;
}
void fillMatrix(float ***m) {
int i,j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
(*m)[i][j] = 1.0; // SEGFAULT
}
}
return;
}
void freeMatrix(float **m) {
int i;
for (i = 0; i < 2; i++) {
free(m[i]); // SEGFAULT
}
free(m);
return;
}
मैं वास्तव में थोड़ा आश्चर्यचकित हूं जो संकलित करता है। "शून्य आवंटित मैट्रिक्स (& एम)" संभवतया एक फ्लोट ** के रूप में एम टाइप नहीं कर रहा है। इसके अलावा, सी में संदर्भ नहीं हैं वैसे ही सी ++ में हैं। – Corbin
घोषणा और definiton पर 'freeMatrix' आदि के लिए हस्ताक्षर क्यों अलग हैं? – keety
केटी, कॉर्बिन: माफ की प्रतिलिपि पेस्ट विफल, इसे – holocron