Pregunta de C

rodrigo ahumada rodahummont en yahoo.com.ar
Mie Mayo 10 15:49:44 CLT 2006


 --- 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]...

cualquier variable nueva que se cree quedaria por
delante de i, asi que no deberia notarse el pisoton

>     printf("canario: %d\n", canario);
> 
>     for (i = 0; i < tam; i++)
>     {
>         valor[tam] = "hey";
>     }
> 
>     printf("canario: %d (%d veces)\n", canario, i);
> 
>     return canario;
> }

ademas ese for se guia por tam asi que deberia estar
correcto para cualquier numero...

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




		
_________________________________________________________ 
Horóscopos, Salud y belleza, Chistes, Consejos de amor: 
el contenido más divertido para tu celular está en Yahoo! Móvil. 
Obtenelo en http://movil.yahoo.com.ar


Más información sobre la lista de distribución Linux