Форум — Ответы ( К темам )
? | Alex: stack overflow :( Помогите, 2ю неделю мучаюсь (15-04-2003 02:00:58) |
Запускаю таймер. В нем передаю переменные компонентам и нажимаю кнопки. Каждая кнопка запускает отдельный идентичный компонент, в програме каждой кнопки создаю new TMemoryString и удаляю его в конце, устанавливаю переменную на повторный запуск из таймера. Через 660 ровно! запусков кнопок выдает ошибку stack overflow. Причем без разницы нажимает ли таймер 10 или 50 кнопок. | |
Павел (15-04-2003 09:59:35) | |
Код.
| |
Георгий (15-04-2003 10:01:14) | |
Хорошо, что не на 666 запуске... Покажи код. | |
Alex (15-04-2003 23:26:49) | |
В onTimer { типа if (final==0){Timer1->Enabled=false;goto fin;} if (knop1==true){final--;knop1=false; Button1Click(Sender);ansi1="текст1";goto fin;} if (knop2==true){final--;knop2=false; Button1Click(Sender);ansi2="текст2";goto fin;} if (knop3==true){final--;knop3=false; Button1Click(Sender);ansi3="текст3";goto fin;} fin: } В бутонах { TMemoryStream *DataOut =new TMemoryStream(); Buf = ansi1; DataOut->Write(&Buf[1], Buf.Length()); DataOut->Seek(0, soFromBeginning); .................. Запуск компонента с параметрами; .................. delete DataOut;knop1=true; } | |
Alex (15-04-2003 23:28:48) | |
Перепутал маленько В onTimer { типа if (final==0){Timer1->Enabled=false;goto fin;} if (knop1==true){final--;knop1=false;ansi1="текст1"; Button1Click(Sender);goto fin;} if (knop2==true){final--;knop2=false;ansi1="текст2"; Button1Click(Sender);goto fin;} if (knop3==true){final--;knop3=false;ansi1="текст3"; Button1Click(Sender);;goto fin;} ^^^^^^^^^^^^^^ fin: } В бутонах { TMemoryStream *DataOut =new TMemoryStream(); Buf = ansi1; DataOut->Write(&Buf[1], Buf.Length()); DataOut->Seek(0, soFromBeginning); .................. Запуск компонента с параметрами; .................. delete DataOut;knop1=true; } | |
Георгий (17-04-2003 22:38:43) | |
Всй конечно замечательно, но где описание переменной Buf ? А без неё у меня всё это работает... | |
Alex (17-04-2003 23:25:47) | |
AnsiString Buf;
| |
Petro (18-04-2003 10:22:53) | |
Найди строку, в которой происходит переполнение стека. Ошибка там.
| |
Георгий (18-04-2003 11:50:45) | |
static int final=10000; static bool knop1,knop2,knop3; static AnsiString ansi1,Buf; void __fastcall TForm1::Timer1Timer(TObject *Sender) { if (final==0){Timer1->Enabled=false;goto fin;} if (knop1==true){final--;knop1=false;ansi1="òåêñò1"; Button1Click(Sender);goto fin;} if (knop2==true){final--;knop2=false;ansi1="òåêñò2"; Button1Click(Sender);goto fin;} if (knop3==true){final--;knop3=false;ansi1="òåêñò3"; Button1Click(Sender);goto fin;} fin: } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { TMemoryStream *DataOut =new TMemoryStream(); Buf = ansi1; this->Button1->Caption=final; if (Buf.Length()) { DataOut->Write(&Buf[1], Buf.Length()); DataOut->Seek(0, soFromBeginning); }; delete DataOut; knop1=true; } ну нету вылетов и со стеком всё в порядке |