Haces bastantes cosas erróneas, pasas los vectores como argumento a la función y vuelves a reservarles la memoria. Para empezar:
- Los vectores V1 y V2 está bien que los reserves en main(), el tercero de la suma solo resérvalo en memoria en la función suma.
- Una vez hecho, al pasarlos por referencia en la función suma, no hace falta que V1 y V2 vuelvan a reservarse, estás asignando nueva memoria para esos vectores y en realidad para no darla ningun uso.
- Si quieres que la función devuelva en cada llamada, el resultado de X posición, no hagas un bucle dentro de la función suma y mucho menos meter el return en el bucle.
Te dejo la solución aqui, cambiando el número de argumentos a pasar a la función suma:
Código:
#include<stdio.h>
#include<stdlib.h>
int vectorsuma(int *V1,int *V2,int *RE,int taman, int pos );
int main ()
{
int *VE1, *VE2, *R, tam, i;
printf("Ingrese la longitud de los vectores:");
scanf("%d",&tam);
VE1= (int *) calloc (tam, sizeof(int) );
VE2= (int *) calloc (tam, sizeof(int) );
printf("\nIngresa los valores del primer vector");
for(i=0;i<tam;i++)
{
printf("\nPosicion[%d]:",i);
scanf("%d",&VE1[i]);
}
printf("\nIngresa los valores del segundo vector");
for(i=0;i<tam;i++)
{
printf("\nPosicion[%d]:",i);
scanf("%d",&VE2[i]);
}
printf("\nLa suma de los vectores es: ");
for(i=0;i<tam;i++)
{
printf("\nResultado posicion [%d]: %d",i, /*VE1[i]+VE2[i];)*/vectorsuma(VE1,VE2,R, tam, i));
}
}
int vectorsuma(int *V1,int *V2, int *RE,int taman, int pos)
{
RE=(int*)calloc(taman,sizeof(int));
RE[pos]= V1[pos] +V2[pos];
return RE[pos];
}