2010-11-21 30 views
5

Je possède ce morceau démontrable de code:Valgrind C fuites de mémoire

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

Cela provoque en Valgrind une erreur, mais je ne sais vraiment pas ce que ça veut dire et comment le résoudre ... pourrait Quelqu'un me donne un conseil?

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

Vous n'avez pas initialisé la matrice [0] avant votre deuxième appel de réallocation. Il pourrait être rempli avec n'importe quoi. – wj32

+5

BTW, envisager d'utiliser des conteneurs STL, 'std :: vector ' étant le choix le plus logique. Pas de realloc, pas de tracas. – Dialecticus

+0

S'il s'agit d'un tableau à deux dimensions, avec quelle valeur doit-il être rempli? –

Répondre

6

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

Vous passez matrix[0] comme paramètre sans l'initialiser au préalable.

1

Vous pouvez utiliser un utilitaire plus puissant. BoundsChecker, Deleaker, XWatcher ...

+2

Essayez-le http://irazin.ru/Programms/XWatcher.htm –

1

Je vous conseille d'utiliser deleaker - un outil puissant pour le débogage des fuites de mémoire!

+2

J'ai ajouté un lien vers le logiciel pour Bienvenue sur le site z0r1fan! –

+0

+5 grand débogueur :) –