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 originaldouble *operaVector(int k, double *vector1, size_t* vectorSize);
int main(){
double vector1[]={3,2,5,4}, *vector2;
size_t vectorSize = sizeof(vector1)/sizeof(double); // 4 en la práctica
vector2 = operaVector(k,vector1,&vectorSize);
}
double *operaVector(int k, double *vector1,size_t* vectorSize){
int i, longv2;
// ...
*vectorSize = longv2;
return vector2;
}
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