Ver Mensaje Individual
  #2 (permalink)  
Antiguo 31/10/2014, 13:11
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Duda en C/C++

Por un lado tienes esto:

Código C++:
Ver original
  1. return res;
  2.   free(v1);
  3.   free(v2);

Todo lo que hay después del return no se va a ejecutar.

Pero vamos, que no creo que tu problema sea ese.

A ver, lo lógico sería que esa función únicamente cree un nuevo vector a partir de otros dos ya existentes, luego esta función no debería liberar memoria. Eso implica borrar los dos free que tienes que, además no se ejecutan, luego mejor quitarlos.

Lo que sucede es que tienes que encargarte de liberar la memoria reservada por los vectores cuando ya no los necesites.

Un ejemplo de laguna de memoria:

Código C++:
Ver original
  1. char* NewArray( int length )
  2. {
  3.   char* to_return = calloc( length, sizeof( char ) );
  4.   return to_return;
  5. }
  6.  
  7. int main( )
  8. {
  9.   char* array = NewArray( 5 ); // OK
  10.   array = NewArray( 10 ); // Laguna de memoria, se pierde el puntero al primer array.
  11.  
  12.   free( array ); // Liberamos el array de 10, pero el de 5 sigue vivo. Perdido pero vivo.
  13. }

Para darte más detalles sobre las lagunas de memoria es conveniente conocer todo el código... básicamente porque Valgrind te dice dónde se han hecho las reservas que están generando lagunas, pero no puede identificar dónde debería liberarse esta memoria (y es ahí donde tienes que actuar).

Un saludo.