Pregunta de C
Horst von Brand
vonbrand en inf.utfsm.cl
Jue Mayo 11 18:39:52 CLT 2006
Alvaro Herrera <alvherre en commandprompt.com> wrote:
> Horst von Brand escribió:
> > > Bueno, el programa de ejemplo se cae con SIGSEGV cuando el "tam" es
> > > mayor que algo de 1900000 (casi 2000000 realmente), lo cual por supuesto
> > > es esperable. (Esto en x86-64 eso si).
> > Aja. Creo que esa es la madre del cordero. 2e6 por 8 bytes son 16MiB, lo
> > que no es muy prudente andar acarreando en el stack.
> Cierto. Pero en el ejemplo real, el arreglo es de 1600 elementos de 4
> bytes c/u como maximo. (Tipicamente sera de menos de 100 elementos).
> Ahora, he seguido investigando mas en el ejemplo real y ya me convenci
> que el problema no es este. Hay otra cosa que por algun motivo esta
> sobreescribiendo la memoria, pero todavia no se que es.
Me parece recordar que gdb puede poner watch en variables, para parar
cuando se modifica. Y AFAIR eso se puede programar a nivel CPU en i386, asi
que jugar con eso podria ayudar.
Lo otro es usar alguno de los programas orientados a pillar problemas con
el menajo de memoria, como valgrind. splint podria ayudar tambien, aunque
es bastante ingenuo (y escandaloso). Muchas tonteras las he corregido via
compilar con -Wall (y posiblemente algunos -W<algo> adicionales) y eliminar
los warnings resultantes (no siempre me quedo claro cual era la causa de
fondo, pero mientras se arreglara el pato, yo feliz :-)
--
Dr. Horst H. von Brand User #22616 counter.li.org
Departamento de Informatica Fono: +56 32 654431
Universidad Tecnica Federico Santa Maria +56 32 654239
Casilla 110-V, Valparaiso, Chile Fax: +56 32 797513
Más información sobre la lista de distribución Linux