Error con vectores! (SOLUCIONADO)

Iniciado por ;c1v!c, 22 Mayo 2011, 22:39 PM

0 Miembros y 1 Visitante están viendo este tema.

;c1v!c

Hola bueno estaba viendo un codigo viejo q tenia y me tira un error cuando se imprimen los vectores
pero en realidad nose cual es ya que antes andaba y ahora no.
Saludos

#include <stdio.h>
#include <stdlib.h>
int main()
{
   int vec[10],vpar[5],vimpar[5];
   int n1,j,i,cont=0;
 
   //---------CARGA DEL VECTOR------------- //  
        for(j=1;j<11;j++)
       {
          printf("Ingrese vector:");
          scanf("%d",&n1);
          vec[j]=n1;
         
        }
   //---------EVALUA CONTENIDO DEL VECTOR------------- //          

       for(j=1;j<11;j++)
       {
           if((j%2)==0)
              {
                vpar[j]= vec[j];          
              }
           else
           {vimpar[j]= vec[j];}
        }
       
   //---------IMPRIME DATOS DEL VECTOR------------- //          
        printf("Los pares son:\n");
        for(j=1;j<6;j++)
        {
          printf(" %d ||",vpar[j]);
        }
         printf("\n");
         printf("Los impares son:\n");          
         for(i=1;i<6;i++)
        {
          printf(" %d ||",vimpar[i]);
        }
        printf("\n");
   return 0;
}


y me tira este error en la consola:


gcc VEC-5.c -o VEC-5
./VEC-5
Ingrese vector:1
Ingrese vector:2
Ingrese vector:3
Ingrese vector:4
Ingrese vector:5
Ingrese vector:6
Ingrese vector:7
Ingrese vector:8
Ingrese vector:9
Ingrese vector:0
Los pares son:
11223844 || 7 || 134514160 || 9 || 0 ||
Los impares son:
1 || 1818672 || 3 || -1076324776 || 5 ||

Khronos14

El error están en la manera que recorres los arrays. Si declaras un array de tamaño 10, la primera posición es el 0 y la última es el 9. Tú estás recorriendo el array del 1 al 11 y produces un BufferOverflow.

Saludos.

;c1v!c

lo modifique como me digiste pero el error sigue!
lo coloque asi "for(j=0;j<10;j++)"

Ferno

Tratá de re-postear el código cada vez que lo modificás así sabemos exactamente que es lo que modificaste.
También cambiaste la forma de recorrerlo en los arrays de 5 posiciones, no?

nicolasblues86

#4
bueno te posteo el codigo corregido esto  anda 10 puntos



#include <stdio.h>
#include <stdlib.h>
int main()
{
   int vec[10],vpar[5],vimpar[5];
   int n1,j,i,k, cont=0;

   //---------CARGA DEL VECTOR------------- //  
        for(j=0;j<10;j++)
       {
          printf("Ingrese vector:");
          scanf("%i",&n1);
          vec[j]=n1;

        }
   //---------EVALUA CONTENIDO DEL VECTOR------------- //          

       for(j=0, i=0, k=0;j<10;j++)
       {
           if((vec[j]%2)==0)
              {
                vpar[k++]= vec[j];          
              }
           else
           {vimpar[i++]= vec[j];}
        }

   //---------IMPRIME DATOS DEL VECTOR------------- //          
        printf("Los pares son:\n");
        for(j=0;j<5;j++)
        {
          printf(" %i ||",vpar[j]);
        }
         printf("\n");
         printf("Los impares son:\n");          
         for(i=0;i<5;i++)
        {
          printf(" %i ||",vimpar[i]);
         
        }
       
        scanf("%d",&n1);
        printf("\n");
   return 0;
}



el problema principal era en esta parte



for(j=1;j<11;j++) //el for que ya lo havias corrgido
       {
           if((j%2)==0) /* dividis por 2 a la variable cuando enverdad deberias   dividir el contenido del vector ej: vec[i]   */
              {
                vpar[j]= vec[j];      /* vpar tiene menos elementos que vec por lo tanto se produce un error de desbordamiento nesesitas una variable aparte que corra tanto vpar como vimpar  */    
              }
           else
           {vimpar[j]= vec[j];}






Solamente hay 10 clases de personas en el mundo los que saben leer binario y los que no

;c1v!c

Perfecto, muchas gracias a todos!
Saludos!