Как перевести ошибку estackoverflow

Срабатывает обработчик, в нем вызывается Next, это вызывает срабатывание обработчика… и так до бесконечности, пока не забивается стек.

Как костыль — можно завести булеву переменную для блокировки обработчика: в начале обработчика проверять флаг, если его значение false — выставлять в true и выполнять остальную часть, в противном случае (если true) — выходить. Тогда при попытке повторно зайти в обработчик его выполнение тут же прекратится. Переменная должна быть объявлена не в самом обработчике, а выше (в модуле, в классе).

Другой костыль — в начале обработчика, выставлять вашему набору данных AfterScroll := nil, а в конце — возвращать обратно AfterScroll := ....

В обоих вариантах код обработчика стоит завернуть в try-finally и разблокировку выполнять в блоке finally. В противном случае, при возникновении исключения, вы останетесь без обработчика.

А вообще лучше разобраться, что у вас там с вычисляемым полем.

I’m getting an EStackOverflow when creating a packed struct in Borland Delphi 7.0

I want to do the following:

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;

But when I run the program and click the button, I get an EStackOverflow error on the begin line of Button1Click.

Can someone help me?

Blorgbeard's user avatar

Blorgbeard

101k48 gold badges226 silver badges271 bronze badges

asked Mar 31, 2011 at 13:14

john's user avatar

3

Simple, the created items are too big for the default stack size. Either increase that when creating the thread or allocate the memory on the heap. Either way works.

Just do the math on it:

sizeof(T4) = 5
sizeof(T3) = 5
sizeof(T2) = 3646 // if I'm right
sizeof(TTT)= 2657934

answered Mar 31, 2011 at 13:20

0xC0000022L's user avatar

0xC0000022L0xC0000022L

20.4k9 gold badges83 silver badges150 bronze badges

1

You can partially solve this by increasing your stack size in your project options.

But you shouldn’t:

Don’t create those huge structures on the stack. That’s what the heap is for, not the stack.

answered Mar 31, 2011 at 15:05

Jeroen Wiert Pluimers's user avatar

leklerk

1 / 1 / 1

Регистрация: 23.02.2012

Сообщений: 74

1

09.01.2013, 10:18. Показов 2643. Ответов 10

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день! Подскажите пожалуйста, когда может появляться сообщение «Stack overflow» (исключение EStackOverflow)?
Стало появляться после того, как написал обработчик события AfterScroll для ADODataSet:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
with DataModule1.UmzDpd do
  begin
    if Active=True then
    begin
      First;
      while Eof<>True do
      begin
        Edit;
        if FieldByName('НаличиеРСТ').AsBoolean=True then
          FieldByName('НаличРСТ').AsString:= 'Да'
        else
          FieldByName('НаличРСТ').AsString:= 'Нет';
        Next;
      end;
      First;
    end;
  end;

Здесь присваивается значение вычисляемому полю (оно исчезает в гриде всякий раз, как переходишь на другую строку). Метод Post не вызываю. т.к. мне не нужно отправлять в БД, нужно только чтобы показывалось в гриде. Я использую LockType=ItBatchOptimistic (тогда данные в БД отсылаются только методом TADODataSet.UpdateBatch). В чем может быть ошибка?



0



2649 / 2270 / 279

Регистрация: 24.12.2010

Сообщений: 13,723

09.01.2013, 10:29

2

Цитата
Сообщение от leklerk
Посмотреть сообщение

В чем может быть ошибка?

1. Ты открыл НД, произошел автопереход на первую запись, возникло AfterScroll
2. В нем ты вызвал Next, при этом тут же
3. Возникло AfterScroll, в нем ты вызвал Next, при этом тут же
4. Возникло AfterScroll, в нем ты вызвал Next, при этом тут же
5. Возникло AfterScroll, в нем ты вызвал Next, при этом тут же
6. Возникло AfterScroll, в нем ты вызвал Next, при этом тут же
7. Возникло AfterScroll, в нем ты вызвал Next, при этом тут же
8. …
9. …

Дальше продолжать ? Или сам догадаешься ?



1



leklerk

1 / 1 / 1

Регистрация: 23.02.2012

Сообщений: 74

09.01.2013, 10:52

 [ТС]

3

Да, это верно, но почему-то, если убрать цикл и написать обработчик CalcFields:

Pascal
1
2
3
4
const
  HasRSTName: array[Boolean] of string = ('Да', 'Нет');
begin
  DataSet.FieldByName('НаличРСТ').AsString:= HasRSTName[DataSet.FieldByName('НаличиеРСТ').AsBoolean];

то проблема остается…



0



2649 / 2270 / 279

Регистрация: 24.12.2010

Сообщений: 13,723

09.01.2013, 10:58

4

Значит где-то в недрах HasRSTName ты так или иначе елозишь по записям этого НД.



0



1 / 1 / 1

Регистрация: 23.02.2012

Сообщений: 74

09.01.2013, 11:06

 [ТС]

5

HasRSTName это массив констант, смотри вверху кода…



0



2649 / 2270 / 279

Регистрация: 24.12.2010

Сообщений: 13,723

09.01.2013, 11:15

6

Цитата
Сообщение от leklerk
Посмотреть сообщение

смотри вверху кода

В упор не вижу там никакого массива.
Зато вижу First и Next, коих ни в коем случае нельзя вызывать ни в AfterScroll ни в CalcFields

Добавлено через 6 минут

Цитата
Сообщение от leklerk
Посмотреть сообщение

const HasRSTName

А, ты про этот ..
Так а ‘НаличРСТ’ — это, надо понимать,

физическое

, а не вычисляемое поле ?



0



leklerk

1 / 1 / 1

Регистрация: 23.02.2012

Сообщений: 74

09.01.2013, 11:30

 [ТС]

7

Цитата
Сообщение от mss
Посмотреть сообщение

Так а ‘НаличРСТ’ — это, надо понимать,

физическое

, а не вычисляемое поле ?

Нет, ‘НаличРСТ’ как раз вычисляемое, а физическое — ‘НаличиеРСТ’.

Добавлено через 1 минуту

Цитата
Сообщение от mss
Посмотреть сообщение

Зато вижу First и Next, коих ни в коем случае нельзя вызывать ни в AfterScroll ни в CalcFields

Я уже убрал First и Next (мой второй кусок кода):

Pascal
1
2
3
4
const
  HasRSTName: array[Boolean] of string = ('Да', 'Нет');
begin
  DataSet.FieldByName('НаличРСТ').AsString:= HasRSTName[DataSet.FieldByName('НаличиеРСТ').AsBoolean];



0



2649 / 2270 / 279

Регистрация: 24.12.2010

Сообщений: 13,723

09.01.2013, 11:32

8

Цитата
Сообщение от leklerk
Посмотреть сообщение

уже убрал First и Next

Что тогда осталось в AfterScroll ?



0



leklerk

1 / 1 / 1

Регистрация: 23.02.2012

Сообщений: 74

09.01.2013, 11:50

 [ТС]

9

Ничего, заменил на CalcFields:

Pascal
1
2
3
4
const
  HasRSTName: array[Boolean] of string = ('Да', 'Нет');
begin
  DataSet.FieldByName('НаличРСТ').AsString:= HasRSTName[DataSet.FieldByName('НаличиеРСТ').AsBoolean];



0



2649 / 2270 / 279

Регистрация: 24.12.2010

Сообщений: 13,723

09.01.2013, 12:00

10

Какие еще события обрабатываешь и как ?



1



1 / 1 / 1

Регистрация: 23.02.2012

Сообщений: 74

09.01.2013, 12:06

 [ТС]

11

Спасибо за помощь, проблема решена, забыл убрать код из AfterScroll.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

09.01.2013, 12:06

Помогаю со студенческими работами здесь

Ошибка «Floating point overflow»
Привет всем мне нужна ваша помощь уже всё переделал но ошибка не пропадает, &quot;Floating point…

В каждом слове текста замените «а» на букву «е», если «а» стоит на четном месте, и заменить букву «б» на сочетание «ак»,
В каждом слове текста замените &quot;а&quot; на букву &quot;е&quot;, если &quot;а&quot; стоит на четном месте, и заменить букву…

Из слов «Работа», «крест», «тон» составить фразу «Кто не работает, тот не ест» и определить ее длину
Из слова &quot;Работа&quot;,&quot;крест&quot;,&quot;тон&quot; составить фразу:&quot;Кто не работает, тот не ест&quot; и определить ее длину.

На форме располагаются компоненты: редактор Edit; линейка ScrollBar; радионабор с опциями «Цветы», «Деревья», «Рыбы», «Звери»
Доброго времени суток, 2 курс 2 семестр, пришли, препод раздал задачи, сказал качайте дома и…

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

Или воспользуйтесь поиском по форуму:

11

 
scout
 
(2003-05-03 20:31)
[0]

Ну беда!!! При запуске проекта вылетает сообщение:

Project lala.exe raised exception class EStackOverflow with message «Stack Overflow». Process stopped.

Что это такое и как с этим бороться?


 
Anatoly Podgoretsky
 
(2003-05-03 20:49)
[1]

Бережнее относиться к стеку, не бездонный.


 
default
 
(2003-05-03 21:36)
[2]

Anatoly Podgoretsky © (03.05.03 20:49)

Юмор однако!

И дно у стека есть хе


 
Aldor
 
(2003-05-03 22:04)
[3]

Означает переполнение стека. Надо смотреть код. Стек заполняется, например, при объявлении локальных переменных и вызовах процедур. Наиболее частая причина переполнения стека — слишком глубокая рекурсия, возможно без условия выхода.

Иногда ошибку можно найти, используя отладочное окно Call Stack

(View -> Debug Windows -> Call Stack). Удачи!


 
scout
 
(2003-05-04 21:45)
[4]

> Наиболее частая причина переполнения стека — слишком глубокая рекурсия, возможно без условия выхода.

Ну ты и загнул попроще нельзя.


 
Arch-vile
 
(2003-05-04 23:19)
[5]

>
> Наиболее частая причина переполнения стека — слишком глубокая >рекурсия, возможно без условия выхода.

>Ну ты и загнул попроще нельзя.


рекурсия — обратный вызов процедуры, т.е. когда она сама себя вызывает. Например

procedure xxx(i:integer);

begin

xxx(i);

end;


вот тебе и обратный вызов, рекурсия. может быть через 2-3 функции-процедуры:

procedure xxx(i:integer);

begin

yyy(i);

end;

procedure yyy(i:integer);

begin

xxx(i);

end;



 
Arch-vile
 
(2003-05-04 23:21)
[6]

ну типа того, может быть сложнее, и не обязательно
i в качестве переменной ;)


 
k-man
 
(2003-05-05 18:35)
[7]

К вопросу понимания стека…

Попытаюсь предположить почему при глубокой рекурсии переполнятся стек.

Насколько я знаю 1)стек не бездонный.

2)в него при вызове процедур ложатся все (
не только они но все же по-моему они здесь стек и забивают)
К вопросу понимания стека…

Попытаюсь предположить почему при глубокой рекурсии переполнятся стек.

Насколько я знаю 1)стек не бездонный.

2)в него при вызове процедур ложатся все передаваемые аргументы(не только они но все же по-моему они здесь стек и забивают).

Может быть поэтому при глубокой рекурсии стек переполняется.

Так как эти параметров, точек возврата и т.д. становится слишком много..

Хотя это лишь предположение…. Вполне возможно ошибочное..


 
Aldor
 
(2003-05-05 20:16)
[8]

2k-man

Все правильно, в стеке резервируется место для аргументов функции, возвращаемого значения функции, всех локальных переменных функции, и так же еще место для указателя, имеющего «внутреннее» предназначение. Таким образом можно примерно подсчитать, сколько места в стеке займет рекурсия заданной глубины.


 
k-man
 
(2003-05-05 22:00)
[9]

А вот что интересно: От чего зависит размер стека?

И можно ли его как-то контролировать? Лично я сомневаюсь…


 
Palladin
 
(2003-05-06 14:17)
[10]



> k-man © (05.05.03 22:00)



от установки

{$M}


 
Alek Aaz
 
(2003-05-07 03:54)
[11]

ИМХО. Если в алгоритме есть логическая ошибка {$M} не поможет. Программа засрет все что можно.


 
Palladin
 
(2003-05-07 08:47)
[12]

естественно


 
Aldor
 
(2003-05-07 09:36)
[13]

Как? У ваc еще нет нового процессора Intel Pentium V, выполняющего бесконечный цикл за 6 секунд? :)))


 
k-man
 
(2003-05-07 12:38)
[14]



> Как? У ваc еще нет нового процессора Intel Pentium V, выполняющего

> бесконечный цикл за 6 секунд? :)))



Слышал что это из рекламы суперкомпа Cray.


 
Aldor
 
(2003-05-07 21:51)
[15]

2k-man

Не важно, это просто шутка :)


 
Aldor
 
(2003-05-07 21:51)
[16]

2k-man

Неважно, это просто шутка :)


 
k-man
 
(2003-05-07 22:34)
[17]

Неплохая шутка-)



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

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

Страницы: (2) [Все] 1 2 
( Перейти к первому непрочитанному сообщению )

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> Проект вызвал исключение EStackOverflow, с сообщением ‘Stack Overflow’ 

:(

   

Опции темы

VTK
Дата 10.11.2006, 10:17 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Проект вызвал исключение EStackOverflow с сообщением ‘Stack Overflow’ как решить проблему??? smile  smile  smile 
Пытался увеличить значение минимального и максимального стека в меню проекта, но проблема этими манипуляциями не решена…
Но такая ошибка появляется только при добавлении на форму Qreport и QRChart, если эти компоненты добалять на другой проект — все компилируется нормально….

Как быть???

Добавлено @ 10:19 
Забыл добавить, что такая проблема возникает если в дельфе установлен TeeChart 6, если его не стоит — все нормально…

PM MAIL ICQ   Вверх
JUmPER
Дата 10.11.2006, 10:51 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

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

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

не совсем понял: переполнение происходит при компиляции?
тогда

Цитата(VTK @  10.11.2006,  10:17 Найти цитируемый пост)
Как быть???

вот и ответ =)

Цитата(VTK @  10.11.2006,  10:17 Найти цитируемый пост)
Забыл добавить, что такая проблема возникает если в дельфе установлен TeeChart 6, если его не стоит — все нормально… 

———————

Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной

PM MAIL   Вверх
VTK
Дата 10.11.2006, 10:55 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Извините за тупость… А какой ответ-то???

PM MAIL ICQ   Вверх
JUmPER
Дата 10.11.2006, 11:26 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

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

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

не ставить TeeChart6 =)

———————

Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной

PM MAIL   Вверх
Alexeis
Дата 10.11.2006, 13:46 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Амеба
Group Icon

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

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

VTK, в какой момент это происходит?

———————

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

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

гениальность идеи состоит в том, что ее невозможно придумать

PM ICQ Skype   Вверх
Rennigth
Дата 10.11.2006, 14:02 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
***

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

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

Цитата(VTK @  10.11.2006,  10:55 Найти цитируемый пост)
Извините за тупость… А какой ответ-то??? 
Цитата(JUmPER @  10.11.2006,  10:51 Найти цитируемый пост)
не совсем понял: переполнение происходит при компиляции?
тогда

VTK
Какой вопрос — такой ответ.

Если во время компиляции… 
Build Project пробовал? 

———————

(* Honesta mors turpi vita potior *)

PM MAIL ICQ   Вверх
VTK
Дата 10.11.2006, 15:13 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Ну попробовал Build Project, но чего-то ничего особенного он мне не сказал…

PM MAIL ICQ   Вверх
Alexeis
Дата 10.11.2006, 16:48 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Амеба
Group Icon

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

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

Цитата(VTK @  10.11.2006,  14:57 Найти цитируемый пост)
alexeis1, переполнение происходит во время создания главной формы проекта.

Тогда нужно пошагово отлаживать, до тех пор пока не будет найдена строка вызывающая исключение…
(поставить бряк, FormCreate и F8 в помощь smile )

———————

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

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

гениальность идеи состоит в том, что ее невозможно придумать

PM ICQ Skype   Вверх
VTK
Дата 13.11.2006, 09:25 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Я это уже пробовал, но моего опыта не хватает, чтобы отследить ошибку….

PM MAIL ICQ   Вверх
Alexeis
Дата 13.11.2006, 09:54 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Амеба
Group Icon

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

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

Цитата(VTK @  13.11.2006,  09:25 Найти цитируемый пост)
Я это уже пробовал, но моего опыта не хватает, чтобы отследить ошибку…. 

Ну тогда есть как минимум 3 выхода
1) Продолжать дальше дебажить, до определения места исключения.
2) Выложить тут проект, чтобы мы смогли это сделать самостоятельно.
3) Обратится к экстрасенсу, чтоб он на расстоянии определил где ошибка. smile 

———————

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

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

гениальность идеи состоит в том, что ее невозможно придумать

PM ICQ Skype   Вверх
VTK
Дата 13.11.2006, 10:19 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Вариантс экстрасенсом явно не подходит!
Вложить сюда проект тоже вряд ли выдет из-за избыточного размера архива.

alexeis1,  послал тебе на мыло, могу выслать всем желающим помочь…

PM MAIL ICQ   Вверх
Alexeis
Дата 13.11.2006, 17:33 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Амеба
Group Icon

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

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

Цитата(VTK @  13.11.2006,  10:19 Найти цитируемый пост)
  послал тебе на мыло, могу выслать всем желающим помочь… 

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

Присоединённый файл ( Кол-во скачиваний: 4 )

Присоединённый файл
 Astra37.zip 535,99 Kb

———————

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

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

гениальность идеи состоит в том, что ее невозможно придумать

PM ICQ Skype   Вверх
VTK
Дата 14.11.2006, 14:20 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Путем многочисленных иттераций процесса компиляции выяснилось, что сообщение вылетает во время создания формы на которой расположен объект QReport и QRChart, на том шаге, когда компонентам QReporta присваиваются адреса ячеек памяти….
Если у кого есть мысли, прошу высказываться!

PM MAIL ICQ   Вверх
VTK
Дата 14.11.2006, 15:25 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Попробовал увеличить размер стека директивой {$M 16384,2147483647}, однако вылезла ошибка «Не в состоянии создать процесс: параметр задан неправильно», но в Drkb черным по белому написано, что максимальный размер стека равен 2147483647 smile 

PM MAIL ICQ   Вверх
Matematik
Дата 14.11.2006, 15:32 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
***

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

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

Цитата(VTK @  14.11.2006,  15:25 Найти цитируемый пост)
Попробовал увеличить размер стека директивой {$M 16384,2147483647}, однако вылезла ошибка «Не в состоянии создать процесс: параметр задан неправильно», но в Drkb черным по белому написано, что максимальный размер стека равен 2147483647

Больную голову лечишь топором 
smile
Лучше бы искал кто стек переполняет.

PM MAIL WWW ICQ   Вверх
VTK
Дата 14.11.2006, 15:45 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Я это и так знаю, QRChart, но без него не могу….
Увеличил размер максимального стека до {$M 16384,536870912} — проблема не решена!!!

Это сообщение отредактировал(а) VTK — 14.11.2006, 15:48

PM MAIL ICQ   Вверх
Rennigth
Дата 14.11.2006, 16:23 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
***

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

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

Цитата(VTK @  14.11.2006,  15:45 Найти цитируемый пост)
Увеличил размер максимального стека до {$M 16384,536870912} — проблема не решена!!!

И не будет. Разницы никакой если у тебя кто-то болеет бесконечной рекурсией.
Ты лутше найди кто… 

PS: Могу ошибаться, но мои телепатические способности почему-то подсказывают мне что причину ты найти не можешь по причине того что дебажишь ты без «debug dcu», в Project options -> Compiler  галку поставь. 

———————

(* Honesta mors turpi vita potior *)

PM MAIL ICQ   Вверх
Matematik
Дата 14.11.2006, 16:30 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
***

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

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

Может всетаки в программе ошибка, а эти компоненты становятся последней каплей, которая переполняет стек.

PM MAIL WWW ICQ   Вверх
VTK
Дата 14.11.2006, 17:26 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Зарылся дальше, выяснилось, что ошибка вылетает во время исполнения кода unit Classes в процедуре:

Код

procedure NotifyGlobalLoading;
var
  I: Integer;
  G: TList;
begin
  G := GlobalLoaded;  // performance:  eliminate repeated trips through TLS lookup
  for I := 0 to G.Count - 1 do TComponent(G[I]).Loaded;
end;

на строке for I := 0 to G.Count — 1 do TComponent(G[I]).Loaded; когда i=125…
Кому-нибудь это что-то говорит???

PM MAIL ICQ   Вверх
VTK
Дата 15.11.2006, 10:20 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

А вот видимо и ответ:

Цитата
 Несовместимость версий  

   В связи с особенностью наших компонент, некоторые версии TeeChart не совсем совместимы с QuickReport, и компонент TQRChart и TeeChart могут быть загружены во время апгрейда QuickReport. Например, во время написания Delphi 3 версии QuickReport 3 (или выше) не все работало с TeeChart, поскольку версия of TeeChart которая поступала с Delphi 3 был кодирована под версию QuickReport 2. Для решения проблемы можно загрузить (свободно) TeeChart 4 (evaluation version J) с сайта TeeMach http://www.teemach.com/. 
Данная редакция расширяет компонент Decision Cube из Client/Sever и Enterprise Editions редакций Delphi – это зависит от TeeChart. В данный момент нет пути использовать Delphi 3 Decision Cube вместе с QuickReport 3 и TeeChart. 
Мы извиняемся за подобную ситуацию. С тех пор как мы разрешили другим сторонам писать для QR, мы не можем автономно вносить исправления в их код. Если вы имеете проблемы после апгрейда QuickReport, пожалуйста проверьте сайты http://www.qusoft.no/ и TeeMach’s для получения последней информации. 

Значит нечего сделать нельзя???

PM MAIL ICQ   Вверх
Vladimir_
Дата 8.12.2009, 16:29 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

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

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

Здравствуйте,
У меня такая ситуация: нет рекурсий; нет функций, в которой бы я передавал параметры и вызывал ее часто, все крутится в одно обработчике- по нажатию кнопки

вот обработчик : 

Код

procedure TForm1.Metod_3_S_3;

const
r=1000;//strtoint(edit7.Text);
p1=3;
z1=3;
//l - образы
var
i,j,k,l:longint;
Em,Ex: extended;
yj,gj: Array [1..100] of extended;
yk,gk: Array [1..3] of extended;

begin
it:=0;
ex:=0;

Repeat

  inc(it);
  Form1.Edit13.Text:=IntToStr(it);
  //===обнуляем вых значения и ошибки

  Em:=0;
  //====Подаем образы
  For l:=1 to StrToInt(Form1.Edit11.Text) do
   begin
     //===Находим вых знач скрытого слоя
     For j:=1 to StrToInt(Form1.Edit8.Text)  do
      begin
        yj[j]:=0;
        For i:=1 to p1 do
         yj[j]:=yj[j]+wij[i,j]*arr[i,l];
        yj[j]:=yj[j]-Tj[j];
        yj[j]:=(1/(1+exp(-yj[j])));
        Application.ProcessMessages;
      end;
     //====Находим выходные значения всей сети
     For k:=1 to z1 {3} do
      begin
        yk[k]:=0;
        For j:=1 to StrToInt(Form1.Edit8.Text) do
         yk[k]:=yk[k]+wjk[j,k]*yj[j];
        yk[k]:=yk[k]-Tk[j];
        Application.ProcessMessages;
      end;
      //===находим ошибки сети
       //==для вых слоя
      For k:=1 to z1 {3} do
       gk[k]:=yk[k]-arr[k,l+1];
       //для скрыт слоя
      For j:=1 to StrToInt(Form1.Edit8.Text) do
       begin
         gj[j]:=0;
         For k:=1 to z1 do
           gj[j]:=gj[j]+gk[k]*wjk[j,k];
       end;

      //==поправляем веса вых слоя
      for j:=1 to StrToInt(Form1.Edit8.Text) do
        for k:=1 to z1 do
           wjk[j,k]:=wjk[j,k]-alfa*yj[j]*gk[k];

      for k:=1 to z1 do
         Tk[k]:=Tk[k]+alfa*gk[k];

      //==веса скрыт слоя
      for i:=1 to p1 do
         for j:=1 to StrToInt(Form1.Edit8.Text) do
           wij[i,j]:=wij[i,j]-alfa*gj[j]*yj[j]*(1-yj[j])*arr[i,l];

      for j:=1 to StrToInt(Form1.Edit8.Text) do
        Tj[j]:=Tj[j]+alfa*gj[j]*yj[j]*(1-yj[j]);
      //===Находим ошибку

      for k:=1 to z1 do
        Em:=Em +(1/2)*sqr(yk[k]-arr[k,l+1]);
   end;

  Form1.Refresh; 
  Form1.Edit14.Text:=FloatToStr(Em);
  Form1.ProgressBar1.Position := Round(100* E / Em );
  Application.ProcessMessages

Until (Em<=E);

  Form1.ProgressBar1.Position := 0;

end;

в самом первом  vare описал массив :
  arr: Array [1..3,1..100000] of real;

Я и все realы заменил extendedами…. уверен что зацикливания не происходит,  т.к если я поставлю размер выборки не 50 а допустим 5-10, шаг обучения 0,1 и среднеквадратичную ошибку 0,1 — отработает без проблем, сообственно это было пояснение к моей программе, которая прилагается….

Обьясните в чем казус,что нужно сделать ,чтобы исправить ситуацию, спасибо!

Присоединённый файл ( Кол-во скачиваний: 2 )

Присоединённый файл
 NeuroNetworks.rar 30,51 Kb

PM MAIL   Вверх



















Страницы: (2) [Все] 1 2 

Ответ в темуСоздание новой темы
Создание опроса
Правила форума «Delphi: Общие вопросы»
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

 

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

Понравилась статья? Поделить с друзьями:
  • Как перевести ошибки валидации laravel
  • Как побороть перфекционизм и боязнь ошибок
  • Как перевести на английский работа над ошибками
  • Как пишется сокращенно работа над ошибками
  • Как ошибок много катится слеза