मैं कोड के इस प्रत्यक्ष टुकड़ा:वेलग्रिंड सी ++ स्मृति लीक
#include <cstdlib>
#include <cstdio>
int main() {
int ** matrix = NULL;
int c = 1, input = 0;
printf("Enter first row of the matrix:\n");
while (!feof(stdin)) {
input = fgetc(stdin);
matrix = (int**) realloc(matrix, 1 * sizeof (int*));
if (matrix == NULL) {
printf("Troubles with memory allocation!\n");
return 0;
}
matrix[0] = (int *) realloc(matrix[0], c * sizeof (int));
matrix[0][c-1] = (int) input;
c++;
}
free(matrix[0]);
free(matrix);
return 0;
}
यह एक त्रुटि वेलग्रिंड में खड़ी कर रहा है, लेकिन मैं वास्तव में क्या मतलब है पता नहीं है और यह कैसे तय करने के लिए ... सकता है कोई मुझे सलाह देता है?
==30031== 1 errors in context 1 of 1:
==30031== Conditional jump or move depends on uninitialised value(s)
==30031== at 0x402868B: realloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==30031== by 0x80485CB: main (main.cpp:17)
==30031== Uninitialised value was created by a heap allocation
==30031== at 0x402860A: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==30031== by 0x4028694: realloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==30031== by 0x80485A6: main (main.cpp:12)
आपने अपने दूसरे रीयलॉक कॉल से पहले मैट्रिक्स [0] प्रारंभ नहीं किया है। यह किसी भी चीज़ से भरा जा सकता है। – wj32
बीटीडब्ल्यू, एसटीएल कंटेनर का उपयोग करने पर विचार करें, 'std :: vector' सबसे तार्किक विकल्प होने के नाते। कोई realloc, कोई परेशानी नहीं। –
Dialecticus
यदि यह 2-आयामी सरणी है, तो किस मूल्य के साथ इसे भरना चाहिए? –