Hola compañeros,
Mi problema es que tengo este código:
Código C++:
Ver originalvector* sub( vector* v1, vector* v2 ) {
int i;
if ( v1->dim != v2->dim ) { //si tienen tamaño distinto
if ( v1->dim > v2->dim ) { //si v1 > v2
vector
* res
= (vector
*)malloc(sizeof( vector
)); res
->data
= (float*)malloc(sizeof( float)*v1
->dim
); res->dim = v1->dim;
for ( i = 0; i < v2->dim; i++)
res->data[i] = v1->data[i] - v2->data[i]; //restamos hasta dim del pequeño
for ( i = i; i < v1->dim; i++)
res->data[i] = v1->data[i]; //sumamos lo que falta
return res;
}
else { //si v2 > v1
vector
* res
= (vector
*) malloc(sizeof( vector
)); res
->data
= (float*) malloc(sizeof( float)*v2
->dim
); res->dim = v2->dim;
for ( i = 0; i < v1->dim; i++)
res->data[i] = v1->data[i] - v2->data[i]; //restamos hasta dim del peuqeño
for ( i = i; i < v2->dim; i++)
res->data[i] = 0.0 - v2->data[i]; //restamos lo que falta añadiendo 0
return res;
}
}
else { //si v1 = v2
vector
* res
= (vector
*) malloc(sizeof( vector
)); res
->data
= (float*) malloc(sizeof( float)*v1
->dim
); res->dim = v1->dim;
for (i = 0; i < v1->dim; i++ )
res->data[i] = v1->data[i] - v2->data[i];
return res;
}
}
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 :)