También es recomendable comprobar que la reservar de memoria dinámica se realizan correctamente, por ello podemos hacer un par de cambios:
1. Inicializar los punteros que se utilizan a NULL
2. realizar una comprobación después de la reservar para ver si el puntero es NULL, puesto que las funciones de reserva de memoria dinámica devuelven NULL en caso de error.
Con estas dos modificaciones evitas que en el caso de que en tiempo de ejecución se realice una mala reserva de memoria el programa aborte con error, por violación de segmento.
El código tras estas dos modificaciones seria:
Código C:
Ver original#include<stdio.h>
#include<stdlib.h>
int vectorsuma(int *V1,int *V2,int *RE,int taman, int pos );
int main ()
{
//Linea cambiada
int * VE1 = NULL, *VE2 = NULL, *R = NULL, tam, i;
printf("Ingrese la longitud de los vectores:"); //Linea cambiada
if((VE1
= (int *) calloc (tam
, sizeof(int) )) == NULL
){ #ifdef DEBUG
fprintf(stderr
, "Error, no se pudo reservar memoria dinamica.\n"); #endif
return 0;
}
//Linea cambiada
if((VE2
= (int *) calloc (tam
, sizeof(int) )) == NULL
){ #ifdef DEBUG
fprintf(stderr
, "Error, no se pudo reservar memoria dinamica.\n"); #endif
return 0;
}
printf("\nIngresa los valores del primer vector"); for(i=0;i<tam;i++)
{
}
printf("\nIngresa los valores del segundo vector"); for(i=0;i<tam;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];}