[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]
[Hilos de Discusión] [Fecha] [Tema] [Autor]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/