[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]
[Hilos de Discusión] [Fecha] [Tema] [Autor]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 > _______________________________________________ > Ayuda mailing list > Ayuda en linux org mx > Para salir de la lista: http://mail.linux.org.mx/mailman/listinfo/ayuda/ > _______________________________________________ Ayuda mailing list Ayuda en linux org mx Para salir de la lista: http://mail.linux.org.mx/mailman/listinfo/ayuda/