Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> тройной массив - stack overflow 
:(
    Опции темы
pegorov
Дата 1.6.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 27.4.2008

Репутация: нет
Всего: нет



Есть сверхпримитивный код.
Код

procedure TForm1.Button1Click(Sender: TObject);
var
    cntr: array [0..255] of array [0..255] of array [0..255] of longint;
      i,j,k: byte;
begin
  for i:=0 to 255 do for j:=0 to 255 do for k:=0 to 255 do cntr[i][j][k]:=0;
end;

При выполнении ругается на переполнение стека. Из-за чего так может быть, я мозг уже сломал =)
PM MAIL   Вверх
Frees
Дата 1.6.2009, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



потомучто cntr это стековая переменная и места в стеке ей не хватило

Код

var
    cntr: array [0..255] of array [0..255] of array [0..255] of longint;
procedure TForm1.Button1Click(Sender: TObject);
      i,j,k: byte;
begin
  for i:=0 to 255 do for j:=0 to 255 do for k:=0 to 255 do cntr[i][j][k]:=0;
end;



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
pegorov
Дата 1.6.2009, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 27.4.2008

Репутация: нет
Всего: нет



Гран мерси, в понедельник утром башка не варит вообще =)
PM MAIL   Вверх
GN1
Дата 1.6.2009, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 23.4.2008
Где: Казахстан

Репутация: нет
Всего: нет



Проверил у себя на D09:
Код

procedure TForm1.btn1Click(Sender: TObject);
const
  a = 62;

var
  cntr: array [0..a] of array [0..a] of array [0..a] of longint;
  i,j,k: byte;
  b: UInt32; // longint

begin
  b := 1;        
  for i:=0 to a do
    for j:=0 to a do
      for k:=0 to a do
      begin
        b := b + 1;
        cntr[i][j][k] := 0;
      end;
  ShowMessage(IntToStr(b * 4));
end;


В настройках компилятора стоит "Максимальный размер стека"- 1048580 байт

Переменная UInt32 (longint) занимает в памяти 4 байта, т.е.:
62 - 1000192
63 - 1048580 (> 1048576)

Компилятор тебе русским языком и говорит, что стек переполнен smile

Кста, как правильно на русском: стек, стэк или стёк?

Добавлено через 51 секунду
Опоздал   smile 
PM MAIL WWW   Вверх
Alexeis
Дата 1.6.2009, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



256 * 256 * 256 * 4 = 64 Мб. В принципе, можно в настройках проекта увеличить размер стека. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
CodeMonkey
Дата 1.6.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата
В принципе, можно в настройках проекта увеличить размер стека.

В данном случае можно, но не нужно. А то так можно дойти до...   был тут один орех, которому всё было мало. Так вместо того, чтобы использовать динамические массивы, он вписал минимальный размер стека в 50 Гб (не, в окошке "плохая" Delphi не дала - так он директивой вписал в код, причём в каждом модуле) и удивлялся: а чего это его программа на Vista не работает? Не иначе как Билл Гейтс виноват!


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.