Mi problema es que tengo este código:
Código C++:
Lo que hace es hacer una resta de dos vectores.Ver original
vector* 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 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 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 res->dim = v1->dim; for (i = 0; i < v1->dim; i++ ) res->data[i] = v1->data[i] - v2->data[i]; return res; } }
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:
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.==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)
==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)
Os escribo para saber si vosotros me podíais ayudar compañeros.
Muchas gracias :)