Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/10/2014, 09:44
yeraypg
 
Fecha de Ingreso: octubre-2014
Ubicación: Cornellá de Llobregat
Mensajes: 8
Antigüedad: 10 años
Puntos: 2
Duda en C/C++

Hola compañeros,

Mi problema es que tengo este código:

Código C++:
Ver original
  1. vector* sub( vector* v1, vector* v2 ) {
  2.         int i;
  3.         if ( v1->dim != v2->dim ) {             //si tienen tamaño distinto
  4.                 if ( v1->dim > v2->dim ) {              //si v1 > v2
  5.                         vector* res = (vector*)malloc(sizeof( vector));
  6.                         res->data = (float*)malloc(sizeof( float)*v1->dim);
  7.                         res->dim = v1->dim;
  8.                         for ( i = 0; i < v2->dim; i++)
  9.                             res->data[i] = v1->data[i] - v2->data[i];       //restamos hasta dim del pequeño
  10.                         for ( i = i; i < v1->dim; i++)
  11.                             res->data[i] = v1->data[i];                     //sumamos lo que falta
  12.             return res;
  13.  
  14.                 }
  15.                 else {                          //si v2 > v1
  16.                         vector* res = (vector*) malloc(sizeof( vector));
  17.                         res->data = (float*) malloc(sizeof( float)*v2->dim);
  18.                         res->dim = v2->dim;
  19.                         for ( i = 0; i < v1->dim; i++)
  20.                             res->data[i] = v1->data[i] - v2->data[i];           //restamos hasta dim del peuqeño
  21.                         for ( i = i; i < v2->dim; i++)
  22.                             res->data[i] = 0.0 - v2->data[i];               //restamos lo que falta añadiendo 0
  23.             return res;
  24.  
  25.                 }
  26.         }
  27.         else {                                  //si v1 = v2
  28.                 vector* res = (vector*) malloc(sizeof( vector));
  29.                 res->data = (float*) malloc(sizeof( float)*v1->dim);
  30.                 res->dim = v1->dim;
  31.                 for (i = 0; i < v1->dim; i++ )
  32.                     res->data[i] = v1->data[i] - v2->data[i];
  33.                 return res;
  34.                 free(v1);
  35.                 free(v2);
  36.  
  37.         }
  38. }
Lo que hace es hacer una resta de dos vectores.

El problema que tengo es que he pasado Valgrind para ver si había fugas de memoria y me ha dicho que tengo en esta función, posiblemente en un malloc, lo que pasa es que no consigo ver donde tengo la fuga de memoria.

Valgrind me devuelve esto:

Cita:
==2722== 252 (144 direct, 108 indirect) bytes in 9 blocks are definitely lost in loss record 2 of 2
==2722== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2722== by 0x4011C7: sub(vector*, vector*) (in /home/yeray/Escritorio/164324_164376/p1)
==2722== by 0x40155E: distance(vector*, vector*) (in /home/yeray/Escritorio/164324_164376/p1)
==2722== by 0x401BCB: determinar_operacion(char*, vector**) (in /home/yeray/Escritorio/164324_164376/p1)
==2722== by 0x401DB0: main (in /home/yeray/Escritorio/164324_164376/p1)
Solo me preocupa la función sub de mi código ya que todos los errores que salen además del de la función SUB es porque esta misma función está incluida en las otras.

Os escribo para saber si vosotros me podíais ayudar compañeros.

Muchas gracias :)

Última edición por yeraypg; 31/10/2014 a las 10:38