Pregunta de C

Horst von Brand vonbrand en inf.utfsm.cl
Mie Mayo 10 23:13:31 CLT 2006


rodrigo ahumada <rodahummont en yahoo.com.ar> wrote:
>  --- Alvaro Herrera <alvherre en commandprompt.com>
> escribió:
> [...]
> 
> > [...]
> > 
> > Ok, tengo que acotar que el problema parece ser que
> > al llegar a un
> > cierto tope escribiendo en el arreglo, empieza a
> > escribir en la variable
> > que viene despues en el stack.  O sea creo que algo
> > asi deberia mostrar
> > el problema -- sin embargo, el programa funciona
> > perfectamente y el
> > canario no se muere.
> > 
> > #include <stdio.h>
> > #include <stdlib.h>
> > 
> > struct foo
> > {
> >     int     bar;
> > };
> > 
> > int buggy(struct foo *a_foo)
> > {
> >     int     tam = a_foo->bar;
> >     char   *valor[tam];
> >     int     canario = 0x7e7e7e7e;
> >     int     i;

> si gcc crea las variables siguiendo el orden en que se
> declaran, canario deberia estar por delante de valor:
> 
> [i][canario][  valor  ][tam]...

Crea las variables "hacia abajo" (en el tope) en el stack, cierto.

[...]

> el problema seria que tam fuera tam pero tam grande
> que al alojar el vector en el stack se alcance a tocar
> las variables globales... y el problema es que en el
> codigo en assembly se aloja el vector en el stack asi
> no mas, sin comprobar cuanto de stack queda... y eso
> es feo

Para programas a nivel usuario el stack es inmenso de grande, asi que seria
muy muy raro que ocurriera eso.
-- 
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