Я получаю ошибку EStackOverflow при создании упакованной структуры в Delphi 7.0 - PullRequest
5 голосов
/ 31 марта 2011

Я получаю EStackOverflow при создании упакованной структуры в Borland Delphi 7.0

Я хочу сделать следующее:

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;

Но когда я запускаю программу и нажимаю кнопку, Я получаю сообщение об ошибке EStackOverflow в строке begin Button1Click.

Может ли кто-нибудь мне помочь?

Ответы [ 2 ]

12 голосов
/ 31 марта 2011

Простой, созданные элементы слишком велики для размера стека по умолчанию. Либо увеличьте это при создании потока, либо выделите память в куче. В любом случае работает.

Просто посчитай:

sizeof(T4) = 5
sizeof(T3) = 5
sizeof(T2) = 3646 // if I'm right
sizeof(TTT)= 2657934
2 голосов
/ 31 марта 2011

Вы можете частично решить эту проблему, увеличив размер стека в опциях вашего проекта.

Но вы не должны:

Не создавайте эти огромные структуры в стеке. Для этого и нужна куча, а не стек.

...