2010-11-21 17 views
5

मैं कोड के इस प्रत्यक्ष टुकड़ा:वेलग्रिंड सी ++ स्मृति लीक

#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

आपने अपने दूसरे रीयलॉक कॉल से पहले मैट्रिक्स [0] प्रारंभ नहीं किया है। यह किसी भी चीज़ से भरा जा सकता है। – wj32

+5

बीटीडब्ल्यू, एसटीएल कंटेनर का उपयोग करने पर विचार करें, 'std :: vector ' सबसे तार्किक विकल्प होने के नाते। कोई realloc, कोई परेशानी नहीं। – Dialecticus

+0

यदि यह 2-आयामी सरणी है, तो किस मूल्य के साथ इसे भरना चाहिए? –

उत्तर

6

matrix[0] = (int *) realloc(matrix[0], c * sizeof (int));

आप इसे पहले से आरंभ बिना एक पैरामीटर के रूप matrix[0] गुजर रहे हैं।

1

आप अधिक शक्तिशाली उपयोगिता का उपयोग कर सकते हैं। बाउंड चेकर, डिलीकर, एक्सवाचर ...

+2

इसे आजमाएं http://irazin.ru/Programms/XWatcher.htm –

1

मैं आपको deleaker का उपयोग करने की सलाह देता हूं - मेमोरी लीक डीबग करने के लिए एक शक्तिशाली टूल!

+2

मैंने सॉफ़्टवेयर के लिए एक लिंक जोड़ा है आप साइट z0r1fan में आपका स्वागत है! –

+0

+5 महान डीबगर :) –

संबंधित मुद्दे