[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]

[Hilos de Discusión] [Fecha] [Tema] [Autor]

Re: [Ayuda] compilacion gcc



bueno, alguien me puede decir porque? pero estando en
una terminal del X si corre, y cuando estoy en una
sesion remota(ej. ssh), no se ejecuta, que tiene que
ver el entorno X aqui....

las matrices son muy grandes pues es un programa para
obtener medidas de tiempo de corrida

  tareas de la escuela ya saben!...


--- "Jorge L. Rivas" <jorge_lopez en xiniom com> wrote:
> Directo al grano: Tus arreglos son
> Gigaaaaaaaaaaaaaaaantes :-o
> 
> --> Explicación:
> 
> 
> C maneja 4 clases de almacenamiento para las
> variables entre ellas auto
> y static que definen la duración del almacenamiento
> (cuanto tiempo
> existe en memoria). De forma llana, cuando una
> variable es auto (como
> tus arreglos ya que auto es el default) se dice que
> tienen una
> persistencia automática, es decir, se asigna
> almacenamiento cada vez que
> son utilizadas. Cuando las variables son de
> persistencia estática
> (static), el almacenamiento se asigna al inicio del
> programa y se
> mantienen así hasta que termina la ejecución.
> 
> Cuando utilizas variables automáticas enormes es
> común que C te mande un
> segmentation fault ya que es incapaz de "crearlasâ??
> y "destruirlas"
> continuamente. 
> 
> --> Cosas interesantes que observar:
> 
> Pasa lo mismo con un solo arreglo de tamaño
> equivalente a tus tres
> arreglos (por ejemplo float arreglo[3000000])
> 
> 
> --> Soluciones
> 
> 1. Usar apuntadores (solución recomenda): digo, a
> pesar de que el código
> es trivial, es recomendable usar apuntadores y
> asignar la memoria de
> manera dinámica.
> 
> 2. Declarar los arreglos como static float a[n][m]
> 
> 3. Declarar las variables fuera del main (como
> globales que por default
> son static) aunque en lo particular no me gustan las
> variables globales.
>   
> 
> Saludos 
> Jorge L. Rivas
> www.xiniom.com
> 
> 
> 
> On Thu, 2003-10-09 at 18:29, Manuel Morales wrote:
> > El programa es el siguiente:
> > 
> > 
> > #define n 1000
> > #define m 1000
> > 
> > int main(void)
> > {
> > float a[n][m],b[n][m],c[n][m];
> > int i,j,k;
> > 
> > for(i=0;i<n;i++)
> >         for(j=0;j<m;j++)
> >         {
> >                 a[i][j]=10;
> >                 b[i][j]=10;
> >                 c[i][j]=0;
> >         }
> > 
> > for(i=0;i<n;i++)
> >         for(j=0;j<n;j++)
> >                 for(k=0;k<m;k++)
> >                         c[i][j]+=a[i][k]*b[k][j];
> > 
> > 
> > printf ("bueno este termino");
> > return 0;
> > }
> > 
> > y gdb da la siguente salida:
> > 
> > This GDB was configured as i386-redhat-linux...
> > (gdb) r
> > Starting program:
> /home/usuarios/bern1629/bin/matriz
> > 
> > Program received signal SIGSEGV, Segmentation
> fault.
> > main () at matriz.c:9
> > 9       for(i=0;i<n;i++)
> > 
> > 
> > bueno mientras toy checando docs....gracias por la
> > ayuda...
> > 
> > bye
> > 
> > 
> > --- Daniel Guerrero <daniel en danguer com> wrote:
> > > 
> > > El Miércoles, 8 octubre, 2003, a las 09:36 PM,
> > > Arturo Espinosa-Aldama 
> > > escribió:
> > > 
> > > >
> > > >> From: Manuel Morales <unberam_info en yahoo com>
> > > >> To: linux_org_mx ayuda <ayuda en linux org mx>
> > > >> Subject: [Ayuda] compilacion gcc
> > > >> Date: Wed, 8 Oct 2003 16:21:10 -0700 (PDT)
> > > >>
> > > >> ya se que para algunos lo que voy a preguntar
> es
> > > >> sencillo:
> > > >>
> > > >> acabo de compilar un programa asi:
> > > >>
> > > >> gcc -o matriz matris.c
> > > >>
> > > >> ok crea el ejecutable, y cuando lo ejecuto en
> una
> > > >> terminal dentro del X el programa corre,
> cuento
> > > lo
> > > >> ejecuto desde una consola, u otra sesion
> telnet o
> > > ssh
> > > >> manda el siguiente error:
> > > >>
> > > >> Segmentation fault
> > > >>
> > > >> como le hago, necesito correrlo desde telnet
> o
> > > sesion
> > > >> ssh?
> > > >
> > > > Muy interesante, especialmente porque parece
> que
> > > no usas ncurses ni 
> > > > nada por el estilo. Compilalo asi:
> > > >
> > > > gcc -g -o matriz matris.c
> > > >
> > > > Y luego dale
> > > >
> > > > gdb matriz
> > > >
> > > > en la linea de gdb, le das r y cuando se
> caiga, le
> > > pones el comando 
> > > > where y nos mandas el backtrace, no?
> > > >
> > > > gdb es el debugger de la suite GNU. info gdb
> para
> > > saber mas.
> > > >
> > > > Saludos,
> > > > Arturo
> > > >
> > > 
> > > Hola, seguramente estás utilizando acceso a
> memoria
> > > de mala forma y lo 
> > > más raro es que mientras utilizar un apuntador
> sin
> > > asignar puede 
> > > "funcionar" en una máquina, en otra no; y peor
> aún
> > > da un comportamiento 
> > > de "a veces si y a veces no" (o "en algunas
> partes
> > > si, en otras no" 
> > > =P), pasa mucho con cadenas; lo mejor que puedes
> > > hacer es como ya dijo 
> > > Arturo, darle al gdb y enviar todos los datos a
> la
> > > lista.
> > > 
> > > Claro si puedes, envia el código también =).
> > > 
> > > Saludos!
> > > _______________________________________________
> > > Ayuda mailing list
> > > Ayuda en linux org mx
> > > Para salir de la lista:
> > http://mail.linux.org.mx/mailman/listinfo/ayuda/
> > 
> > 
> > __________________________________
> > Do you Yahoo!?
> > The New Yahoo! Shopping - with improved product
> search
> > http://shopping.yahoo.com
> > _______________________________________________
> 
=== message truncated ===


__________________________________
Do you Yahoo!?
The New Yahoo! Shopping - with improved product search
http://shopping.yahoo.com
_______________________________________________
Ayuda mailing list
Ayuda en linux org mx
Para salir de la lista: http://mail.linux.org.mx/mailman/listinfo/ayuda/



[Hilos de Discusión] [Fecha] [Tema] [Autor]