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