2010-11-21 20 views
5

tengo esta pieza demostrable de código:memoria Valgrind C++ fugas

#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; 
} 

Esto está causando en Valgrind un error, pero realmente no saben lo que significa eso y cómo solucionarlo ... podía alguien me da un consejo?

==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

No ha inicializado la matriz [0] antes de su segunda llamada realloc. Podría estar lleno de cualquier cosa. – wj32

+5

BTW, considere el uso de contenedores STL, 'std :: vector ' es la opción más lógica. Sin realloc, sin problemas. – Dialecticus

+0

Si se trata de una matriz bidimensional, ¿con qué valor debe rellenarse? –

Respuesta

6

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

está de paso matrix[0] como un parámetro sin inicializar antemano.

1

Puede utilizar la utilidad más potente. BoundsChecker, Deleaker, XWatcher ...

+2

Pruébelo http://irazin.ru/Programms/XWatcher.htm –

1

Te aconsejo que uses deleaker - ¡una poderosa herramienta para depurar fugas de memoria!

+2

He agregado un enlace al software para usted, bienvenido al sitio z0r1fan! –

+0

+5 gran depurador :) –