Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Фалмари
0 / 0 / 0
Регистрация: 21.04.2012
Сообщений: 18
1

переполнение стека

11.05.2014, 18:39. Просмотров 589. Ответов 3
Метки нет (Все метки)

Помогите довести программу до ума.
double.7z

Все, что я могла с ней сделать - я уже сотворила. В пятницу сдавать диплом - а программы, главной сути диплома, все нет. СПАСИТЕ!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2014, 18:39
Ответы с готовыми решениями:

переполнение стека
Здравствуйте. Пишу пару программ, они постепенно развивались, вместе с моими...

Переполнение стека
Вот пробую писать программку по поиску в реестре битых ссылок на файлы но...

Переполнение стека
Добрый вечер)пытаюсь написать программу, но возникла ошибка с переполнением...

переполнение стека!
вот кодprocedure TForm1.CheckBox7Click(Sender: TObject); begin if...

Переполнение стека. Модуль
Требуется написать программу вывода таблицы функции, которую оформить в виде...

3
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
12.05.2014, 00:19 2
Массивы вот этого типа:
Delphi
1
type Tmas = array [0..N,0..N,0..trunc(N/2)] of double;
очень большие - 108 721 200 байт во внутреннем представлении (при N = 300). И они объявлены на локальном уровне - в методах. А переменные процедур, функций и методов всегда располагаются в стеке. Размера стека просто не хватает для размещения таких больших объектов. Надо объявление этих массивов на глобальный уровень перенести. Либо в параметрах проекта можно увеличить размер стеков - Project - Optioons... - вкладка Linker, параметр Max stacksize.

Добавлено через 3 минуты
А, хотя даже через настройку Max stacksize такие размеры не удастся задать - там есть ограничения. В общем, надо объявление тех массивов перенести на глобальный уровень.

Добавлено через 7 минут
Ещё там есть тип массива Tmas2. Массивы такого типа тоже очень большие. И на локальном уровне объявлено больше десятка таких массивов. Они тоже в стек не поместятся.

В данном случае лучше всего поступить так - вместо статических массивов использовать динамические. И объявления этих динамических массивов оставить на локальном уровне.
0
Фалмари
0 / 0 / 0
Регистрация: 21.04.2012
Сообщений: 18
12.05.2014, 01:37  [ТС] 3
Цитата Сообщение от Mawrat Посмотреть сообщение
В данном случае лучше всего поступить так - вместо статических массивов использовать динамические. И объявления этих динамических массивов оставить на локальном уровне.
Я не понимаю, как это сделать. Можете хотя бы показать на примере?
0
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
12.05.2014, 08:58 4
Вот, как будет выглядеть начало метода TForm1.Improved_MakKormakClick():
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
procedure TForm1.Improved_MakKormakClick(Sender: TObject);
const N=300;
type Tmas = array of array of array of double; //Tmas = [0..N,0..N,0..trunc(N/2)] of double;
     Tmas2 = array of array of extended; //Tmas2 = array [0..N,0..N] of extended;
var i,j,m,code,K:integer;
    u,v: Tmas;
    fl,fh,a,w,wa,wb,wmax,wmin: Tmas2;
    c,tao,h: extended;
    p1,p2,q1,q2,r1,r2,ac,cc: Tmas2;
begin
  //Выделяем память для динамических массивов.
  SetLength(u, N + 1, N + 1, trunc(N/2) + 1);
  SetLength(v, N + 1, N + 1, trunc(N/2) + 1);
 
  SetLength(fl, N + 1, N + 1);
  SetLength(fh, N + 1, N + 1);
  SetLength(a, N + 1, N + 1);
  SetLength(w, N + 1, N + 1);
  SetLength(wa, N + 1, N + 1);
  SetLength(wb, N + 1, N + 1);
  SetLength(wmax, N + 1, N + 1);
  SetLength(wmin, N + 1, N + 1);
 
  SetLength(p1, N + 1, N + 1);
  SetLength(p2, N + 1, N + 1);
  SetLength(q1, N + 1, N + 1);
  SetLength(q2, N + 1, N + 1);
  SetLength(r1, N + 1, N + 1);
  SetLength(r2, N + 1, N + 1);
  SetLength(ac, N + 1, N + 1);
  SetLength(cc, N + 1, N + 1);
...
end;
Таким же образом надо подправить другие методы, где используются массивы типов Tmas и Tmas2.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2014, 08:58

Ошибка: Переполнение стека
Помогите разобраться непойму в чем дело! Выдает ошибку Переполнение стека! Вот...

Задан указатель P1 на вершину непустого стека. Создать два новых стека
Добрый вечер, у меня возникла проблемка с такой программкой. Вывести в...

Стек: Переместить все элементы из первого стека во второй и вывести адрес новой вершины стека
Даны указатели P1 и P2 на вершины двух непустых стеков. Переместить все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru