Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/03/2016, 05:11
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Duda: Contar elementos vector dentro de función.

La única forma es que la función acepte un nuevo parámetro que indique el tamaño del vector actual.

Por supuesto, sería recomendable conocer también el tamaño del nuevo vector por si tienes que ampliar su capacidad más adelante. En tal caso puede ser recomendable que este parámetro que estamos comentando se pase por referencia, de tal forma que en dicha variable se almacene el tamaño del nuevo array:

Entonces la primera llamada quedaría tal que:

Código C:
Ver original
  1. double *operaVector(int k, double *vector1, size_t* vectorSize);
  2.  
  3. int main(){
  4.     double vector1[]={3,2,5,4}, *vector2;
  5.     size_t vectorSize = sizeof(vector1)/sizeof(double); // 4 en la práctica
  6.  
  7.     vector2 = operaVector(k,vector1,&vectorSize);
  8. }
  9.  
  10. double *operaVector(int k, double *vector1,size_t* vectorSize){
  11.     int i, longv2;
  12.     // ...
  13.     *vectorSize = longv2;
  14.     return vector2;
  15. }

Una vez dicho esto te comento que si usas memoria dinámica lo suyo es liberarla después. Haces uso de malloc pero no veo ningún free. Quizás la función operaVector debería liberar la memoria asociada a vector1. Esta opción es una de las más limpias pero entonces no le puedes pasar un arreglo que no haya sido creado con malloc.

En cualquier caso, lo dicho, libera la memoria que reservas una vez ya no vaya a ser necesaria.

PD.: también existe realloc, que realiza todo el proceso por tí: reserva un área de memoria del tamaño indicado, copia los datos de la memoria antigua a la actual y finalmente libera la memoria antigua.

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.