Alvaro Herrera <[EMAIL PROTECTED]> wrote:
> Horst von Brand escribió:
> > rodrigo ahumada <[EMAIL PROTECTED]> wrote:
> > > > 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.

> Trate de ver lo que sucedia si ponia un canario abajo y otro arriba de
> la variable, o sea 
> 
> int   canario1 = 0x7e7e7e7e;
> char   *valor[tam];
> int   canario2 = 0xe7e7e7e7;

> Sin embargo, me lleve una sorpresa porque mostrando las posiciones de
> las variables en el stack, canario1 y canario2 aparecen junto con tam e
> i, pegadas al principio del stack, mientras que valor aparece mucho mas
> abajo!  Deduzco que el compilador se toma la libertad de reordenar las
> variables como le plazca.  Esto es asi tanto con -O0, como -O2 y sin
> especificar ninguna.

Oh, claro. El arreglo valor[] es especial, porque es de taman~o
variable. Lo mas simple es poner esa clase de leseras al tope (minimiza los
calculos raros que hay que hacer para ubicar variables). O sea, quedaria
algo del corte:
    
        ----------
       [ canario1 ]
        ----------
       [ *valor1  ]--+
        ----------   |
    +--[ *valor2  ]  |
    |   ----------   |
    |  [ canario2 ]  |
    |   ----------   |
    |  [  v       ]<-+
    |  [   a      ]
    |  [    l     ]
    |  [     o    ]
    |  [      r   ]
    |  [       1  ]
    |   ----------
    +->[  v       ]
       [   a      ]
       [    l     ]
       [     o    ]
       [      r   ]
       [       2  ]
        ----------

[...]

> > Para programas a nivel usuario el stack es inmenso de grande, asi que seria
> > muy muy raro que ocurriera eso.

> 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.
-- 
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
From [EMAIL PROTECTED]  Thu May 11 17:27:09 2006
From: [EMAIL PROTECTED] (Alvaro Herrera)
Date: Thu May 11 17:27:11 2006
Subject: Pregunta de C
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

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.

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support
From [EMAIL PROTECTED]  Thu May 11 17:43:13 2006
From: [EMAIL PROTECTED] (Horst von Brand)
Date: Thu May 11 17:43:17 2006
Subject: Acerca de QT 
In-Reply-To: Your message of "Thu, 11 May 2006 08:32:45 CST."
        <[EMAIL PROTECTED]> 
Message-ID: <[EMAIL PROTECTED]>

""Manuel R. Bercián"" <[EMAIL PROTECTED]> wrote:
> Perdonen la pregunta yo se que es una lista Linux pero como es QT,
> quiza ustedes saben,
> tengo un programa en QT, en Windows como puedo hacer para levantar
> aplicaciones
> instaladas ahi, por ejemplo, word, excel, el internet explorer, etc,
Gracias

Ni idea. Pregunta en una lista sobre QT o sobre Windows.
-- 
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

Responder a