Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2014, 19:25   #1
Victor1963
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 31
По умолчанию перегружен стек

Здравствуйте, что мне сделать, что-бы увеличить объем массив, пишет, стек перегружен.
Код:
Mat:array[0..5, 0..10, 0..20, 0..613] of integer;
   
begin
 x_width:=Image1.Width;
 y_height:=Image1.Height;
 Image1.Canvas.Pen.Color:=clBlack;
 Image1.Canvas.Pen.Width:=1;
 Image1.Canvas.Brush.Style:=bsClear;


  Image1.Canvas.MoveTo(10,0);
  Image1.Canvas.LineTo(1147,633);

  

  for i:=Low(Mat) to High(Mat) do
  for j:=Low(Mat[i]) to High(Mat[i]) do
  for x:=Low((Mat[i])[r]) to High((Mat[i])[r]) do
  for y:=Low(((Mat[i])[r])[x]) to High(((Mat[i])[r])[x]) do
   Mat[i,j,x,y]:=0;

Последний раз редактировалось Stilet; 13.03.2014 в 20:50.
Victor1963 вне форума Ответить с цитированием
Старый 13.03.2014, 19:43   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Откуда взялся индекс r?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 13.03.2014, 20:06   #3
Victor1963
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 31
По умолчанию перегрузка стека

Спасибо. исправил. но все равно не работает
Код:
Mat:array[0..180, 0..10, 0..20, 0..613] of integer;
    
begin
 x_width:=Image1.Width;
 y_height:=Image1.Height;
 Image1.Canvas.Pen.Color:=clBlack;
 Image1.Canvas.Pen.Width:=1;
 Image1.Canvas.Brush.Style:=bsClear;



  

  for i:=Low(Mat) to High(Mat) do
  for r:=Low(Mat[i]) to High(Mat[i]) do
  for x:=Low((Mat[i])[r]) to High((Mat[i])[r]) do
  for y:=Low(((Mat[i])[r])[x]) to High(((Mat[i])[r])[x]) do
   Mat[i,r,x,y]:=0;

Последний раз редактировалось Stilet; 13.03.2014 в 20:50.
Victor1963 вне форума Ответить с цитированием
Старый 13.03.2014, 20:29   #4
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Цитата:
Спасибо. исправил. но все равно не работает
Эт ты кого благодарил?
Цитата:
Откуда взялся индекс r?
Так и не уточнил
bulldog5293 вне форума Ответить с цитированием
Старый 13.03.2014, 21:46   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Проверил у себя - и правда выдается ошибка. Посчитал количество требуемой памяти для этой матрицы 102687816 байт ~ 97 мегабайт (в настойках проекта посмотрел - максимальный размер стека задан 1048576 байт = 1 мегабайт). Когда объявил матрицу глобальной переменной, то ошибка исчезла.

bulldog5293, благодарил меня. А зачем уточнять-то про индекс? Это был намёк на несоответствие индексов в циклах.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 13.03.2014, 21:51   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Как вариант :
{$M 101711872}
Poma][a вне форума Ответить с цитированием
Старый 14.03.2014, 12:11   #7
Victor1963
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 31
По умолчанию Перегружен стек

Я не силен в прог., но поставил переменную в другие места, показывает перегрузку, поправте пожалуйста. Заранее благодарю.

private
{ Private declarations }
Mat:array[0..180,0..10,0..1118,0..613] of integer;
public
{ Public declarations }
{Mat:array[0..180,0..10,0..1118,0..613] of integer;}
end;

var
Form1: TForm1;
{Mat:array[0..180,0..10,0..1118,0..613] of integer;}
implementation
Victor1963 вне форума Ответить с цитированием
Старый 14.03.2014, 12:57   #8
Victor1963
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 31
По умолчанию перегрузка стека

Сделал так, все равно показывает перегрузку.
private
{ Private declarations }


public
{ Public declarations }

end;
type
TDynArr=array of integer;
var
Mat1:TDynArr;
x,y:integer;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonClick(Sender: TObject);

var
x,y,a,b,f,q,i,r,i1,r1,m,T,J,count,s ize:integer;
RMax, x_width, y_height: integer;
OperBegin, OperEnd: TTimeStamp;
Total: LongWord;
Teta,Teta1: Double;
ArPoint: array of Tpoint;

Mat1: array [0..1118, 0..613] of integer;


begin

for x:=Low(Mat1) to High(Mat1) do
for y:=Low(Mat1[x]) to High(Mat1[x]) do
Mat1[x,y]:=0;
Victor1963 вне форума Ответить с цитированием
Старый 14.03.2014, 12:59   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Вам точно нужен такой большой массив? Да еще и статический. Вот при таком объявлении у меня не было ошибки:
Код:
var
  Form1: TForm1;
  Mat: array[0..180,0..10,0..1118,0..613] of integer;
Таким образом у Вас будет всего лишь один такой массив. Может быть расскажите немного о решаемой задаче?
Попробуйте (не проверял):
Код:
procedure TForm1.ButtonClick(Sender: TObject);
var
  mat: array of array of integer;


begin
  setlength(mat, 1119, 614);
  //
  setlength(mat, 0, 0);
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 14.03.2014 в 13:03.
BDA вне форума Ответить с цитированием
Старый 14.03.2014, 13:03   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вместо
Цитата:
Код:
procedure TForm1.ButtonClick(Sender: TObject);

var
x,y,a,b,f,q,i,r,i1,r1,m,T,J,count,s ize:integer;
RMax, x_width, y_height: integer;
OperBegin, OperEnd: TTimeStamp;
Total: LongWord;
Teta,Teta1: Double;
ArPoint: array of Tpoint;

Mat1: array [0..1118, 0..613] of integer;


begin

for x:=Low(Mat1) to High(Mat1) do
for y:=Low(Mat1[x]) to High(Mat1[x]) do
Mat1[x,y]:=0;
напишите:
Код:
var
   Mat1: array [0..1118, 0..613] of integer;

procedure TForm1.ButtonClick(Sender: TObject);

var
x,y,a,b,f,q,i,r,i1,r1,m,T,J,count,s ize:integer;
RMax, x_width, y_height: integer;
OperBegin, OperEnd: TTimeStamp;
Total: LongWord;
Teta,Teta1: Double;
ArPoint: array of Tpoint;



begin

for x:=Low(Mat1) to High(Mat1) do
for y:=Low(Mat1[x]) to High(Mat1[x]) do
Mat1[x,y]:=0;
тем самым Вы сделаете переменную Mat1 глобальной и она будет вынесена из стека, где задаются все локальные переменные...


p.s. я не понимаю, зачем Вам такие огромные массивы и не понимаю, что Вы делаете, поэтому не уверен, что мой совет Вам поможет (в статегическом плане)...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
стек на с++ Светa Общие вопросы C/C++ 2 19.02.2012 18:44
Стек на С++ Electroflower Общие вопросы C/C++ 37 05.01.2012 14:20
стек cop08 Общие вопросы C/C++ 1 25.03.2011 19:18
стек в с++ Aleksa_ks Помощь студентам 0 02.05.2010 12:12