Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/06/2015, 14:37
tote_skyria
 
Fecha de Ingreso: junio-2015
Mensajes: 2
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Sumar Vectores con funciones

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
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int vectorsuma(int *V1,int *V2,int *RE,int taman, int pos );
  5.  
  6. int main ()
  7. {
  8.     //Linea cambiada
  9.     int * VE1 = NULL, *VE2 = NULL, *R = NULL, tam, i;
  10.    
  11.     printf("Ingrese la longitud de los vectores:");
  12.     scanf("%d",&tam);
  13.   //Linea cambiada  
  14.     if((VE1= (int *) calloc (tam, sizeof(int) )) == NULL){
  15. #ifdef DEBUG
  16.            fprintf(stderr, "Error, no se pudo reservar memoria dinamica.\n");
  17. #endif
  18.            return 0;
  19. }
  20.     //Linea cambiada
  21.     if((VE2= (int *) calloc (tam, sizeof(int) )) == NULL){
  22. #ifdef DEBUG
  23.            fprintf(stderr, "Error, no se pudo reservar memoria dinamica.\n");
  24. #endif
  25.            free(VE1);
  26.            return 0;
  27. }
  28.    
  29.     printf("\nIngresa los valores del primer vector");
  30.     for(i=0;i<tam;i++)
  31.     {
  32.         printf("\nPosicion[%d]:",i);
  33.         scanf("%d",&VE1[i]);
  34.     }
  35.    
  36.     printf("\nIngresa los valores del segundo vector");
  37.     for(i=0;i<tam;i++)
  38.     {
  39.        
  40.         printf("\nPosicion[%d]:",i);
  41.         scanf("%d",&VE2[i]);
  42.     }
  43.    
  44.     printf("\nLa suma de los vectores es: ");
  45.     for(i=0;i<tam;i++)
  46.     {
  47.         printf("\nResultado posicion [%d]: %d",i, /*VE1[i]+VE2[i];)*/vectorsuma(VE1,VE2,R, tam, i));
  48.     }
  49.    
  50. }
  51.  
  52. int vectorsuma(int *V1,int *V2, int *RE,int taman, int pos)
  53. {
  54.    
  55.     RE=(int*)calloc(taman,sizeof(int));
  56.        
  57.         RE[pos]= V1[pos] +V2[pos];
  58.         return RE[pos];}

Última edición por tote_skyria; 05/06/2015 a las 07:30