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