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


Автор: VTK 10.11.2006, 10:17
Проект вызвал исключение EStackOverflow с сообщением 'Stack Overflow' как решить проблему??? smile  smile  smile 
Пытался увеличить значение минимального и максимального стека в меню проекта, но проблема этими манипуляциями не решена...
Но такая ошибка появляется только при добавлении на форму Qreport и QRChart, если эти компоненты добалять на другой проект - все компилируется нормально....

Как быть???

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

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

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


Автор: VTK 10.11.2006, 10:55
Извините за тупость... А какой ответ-то???

Автор: JUmPER 10.11.2006, 11:26
не ставить TeeChart6 =)

Автор: Alexeis 10.11.2006, 13:46
VTK, в какой момент это происходит?

Автор: Rennigth 10.11.2006, 14:02
Цитата(VTK @  10.11.2006,  10:55 Найти цитируемый пост)
Извините за тупость... А какой ответ-то??? 


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


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

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

Автор: VTK 10.11.2006, 15:13
Ну попробовал Build Project, но чего-то ничего особенного он мне не сказал...

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

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

Автор: VTK 13.11.2006, 09:25
Я это уже пробовал, но моего опыта не хватает, чтобы отследить ошибку....

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

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

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

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

Автор: Alexeis 13.11.2006, 17:33
Цитата(VTK @  13.11.2006,  10:19 Найти цитируемый пост)
  послал тебе на мыло, могу выслать всем желающим помочь... 
 Так экзешник зачем было архивировать, если кто-то будет дебажить, то все равно прийдется компилировать, так что в данном случае он был лишним весом.
------------------------------------------------------------
Выкладываю архив

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

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

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

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

Автор: VTK 14.11.2006, 15:45
Я это и так знаю, QRChart, но без него не могу....
Увеличил размер максимального стека до {$M 16384,536870912} - проблема не решена!!!

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

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

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

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

Автор: VTK 14.11.2006, 17:26
Зарылся дальше, выяснилось, что ошибка вылетает во время исполнения кода 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...
Кому-нибудь это что-то говорит???

Автор: VTK 15.11.2006, 10:20
А вот видимо и ответ:

Цитата

 Несовместимость версий  
 
  
В связи с особенностью наших компонент, некоторые версии 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 для получения последней информации. 



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

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

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

Код

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 - отработает без проблем, сообственно это было пояснение к моей программе, которая прилагается....

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

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