2011-03-31 11 views
5

Recibo un EStackOverflow al crear una estructura envasados ​​en Borland Delphi 7.0me sale un error al crear EStackOverflow estructura envasados ​​en Delphi 7.0

Quiero hacer lo siguiente:

Type 

T4 = packed record 
    VT : integer; 
    SKT : byte; 
    end; 

    T3 = packed record 
    O : boolean;  
    TT4 : array of T4; 
    end; 

    T2 = packed record 
    con : boolean; 
    TT3 : array [64..90,64..90] of T3; 
    End; 

    TTT = array [64..90,64..90] of T2; 


procedure TForm1.Button1Click(Sender: TObject); 
var 
    Arr : TTT; 
begin 
     Arr[64,64].con:=false; 
end; 

Pero cuando Ejecuto el programa y hago clic en el botón, obtengo un error de EStackOverflow en la línea begin de Button1Click.

¿Alguien me puede ayudar?

+0

Realmente, lo acabo de confirmar (y la pregunta se actualizó ligeramente) – Blorgbeard

+1

@daemon Esa parte es inofensiva, es solo 4 + 1 bytes. Las matrices de tamaño constante son el problema. Simplemente son demasiado grandes. – CodesInChaos

+1

@daemon_x: no toca TT4 en absoluto, y esa expresión debe ser 'sizeof (Pointer)' de todos modos (matriz dinámica). – 0xC0000022L

Respuesta

12

Simple, los elementos creados son demasiado grandes para el tamaño de pila predeterminado. O incremente eso al crear el hilo o asigne la memoria en el montón. De cualquier manera funciona.

Justo a hacer los cálculos en él:

sizeof(T4) = 5 
sizeof(T3) = 5 
sizeof(T2) = 3646 // if I'm right 
sizeof(TTT)= 2657934 
+0

Spot on! Aunque obtengo SizeOf (TTT) = 3646 * 27 * 27 = 2657934 = 2.5MB El tamaño de pila máximo predeterminado es de solo 1MB. :/ –

+0

si SizeOf (T2) es 3646, SizeOf (TTT) debería ser 2657934, ¿verdad? – jachguate

2

Usted puede resolver en parte este mediante el aumento de tamaño de la pila en las opciones de proyecto.

Pero no se debe:

No crear esas enormes estructuras en la pila. Para eso está el montón, no la pila.

Cuestiones relacionadas