Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Переполнение стека


Автор: Garmahis 19.3.2006, 14:29
При заполнение массива
Код

type
TStrAr=array of string;
TStrArAr=array of array of string;
TIntArAr=array of array of integer;
TStrArArAr=array of array of array of string;
TBoolAr=array of Boolean;
TDatArAr=array of array of TDate;
TPapers=record
UserN:string;
MachPapers:Integer;
MachNumbers:Integer;
MachPages:Integer;
MachUsers:Integer;
Paper:TStrAr;
PaperID:TStrAr;
User:TStrArAr;
CanEdit:TBoolAr;
PaperN:TStrArAr;
PaperNID:TStrArAr;
PaperD:TDatArAr;
MachPage:TIntArAr;
Line:TStrArArAr;
end;

Инициализируются массивы вот так:
Код

Papers.MachPapers:=20;
Papers.MachNumbers:=47;
Papers.MachPages:=68;
Papers.MachUsers:=37;
SetLength(Papers.Paper, Papers.MachPapers);
SetLength(Papers.PaperID ,Papers.MachPapers);
SetLength(Papers.User ,Papers.MachPapers, Papers.MachUsers);
SetLength(Papers.CanEdit ,Papers.MachPapers);
SetLength(Papers.PaperN ,Papers.MachPapers, Papers.MachNumbers);
SetLength(Papers.PaperNID ,Papers.MachPapers, Papers.MachNumbers);
SetLength(Papers.PaperD ,Papers.MachPapers, Papers.MachNumbers);
SetLength(Papers.MachPage ,Papers.MachPapers, Papers.MachNumbers);
SetLength(Papers.Line ,Papers.MachPapers, Papers.MachNumbers, Papers.MachPages);

Выводиться сообщение Stack Overflow. Вобщем стек переполнен. Подскажите пожалуйста как бороться? Я не понимаю причём тут стек...

Автор: Fin 19.3.2006, 17:19
Ты объявляеш переменные не динамически. Все такие переменные распологаются в стеке. Тут два выхода
1) Уведичить стэк (но при таких аппетитах не поможет)
2) Создавать все динамически в Куче (размер данных до 2 гигабайт)

Автор: Garmahis 19.3.2006, 20:42
Можно подробнее про второй вариант? И почему большие аппетиты? Я по массиву разбираю текстовый фаел весом в 107 кб...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)